2012-03-16 2 views
1

Я пытаюсь создать систему плагина, используя Delphi XE2 через фреймворк Firemonkey. Проблема в том, что я получаю ошибку GetProcAddress - незаявленный идентификатор. Когда я пытаюсь использовать GetProcAddress в проекте VCL, все работает отлично, так в чем разница между VCL и Firemonkey, когда речь идет о GetProcAddress и как использовать его в приложении Firemonkey.Необъявленный идентификатор 'GetProcAddress' в приложении FireMonkey

Благодаря

ответ

3

GetProcAddress система API вызова для Windows.
По этой причине ему не место в приложении для перекрестной платформы FMX.

Если вы хотите, чтобы приложение было запущено в Windows, вы можете добавить устройство, где GetProcAddress определено в разделе uses.

От: http://docwiki.embarcadero.com/RADStudio/en/Libraries_and_Packages

добавить Windows в пункте использования.

что разница между VCL и FireMonkey, когда речь идет о GetProcAddress

В библиотеке VCL связан специально для Windows, FireMonkey (ака FMX), делается кросс-платформенный, и по этой причине не добавляет windows к предложению по умолчанию.

+0

docwiki говорит, что есть 'System.SysUtils.GetProcAddress()' (http://docwiki.embarcadero.com/RADStudio/en/Cross-Platform_Shared_Libraries) .. но я не могу найти его здесь -> http://docwiki.embarcadero.com/Libraries/en/System.SysUtils – teran

+0

@teran, см. ссылку в ответе, он говорит буквально: 'Вы можете обращаться к процедурам в библиотеку через прямые вызовы API Win32, включая LoadLibrary, FreeLibrary и GetProcAddress. Эти функции объявлены в Windows.pas. В этом случае используйте переменные процедурного типа для ссылки на импортированные процедуры. ' – Johan

+0

@teran выглядит как ошибка документации на странице DocWiki о межплатформенных общих библиотеках. – mjn

4

При компиляции приложения для Windows используйте Winapi.Windows.GetProcAddress. Если нет, используйте System.SysUtils.GetProcAddress. Предложение использует в этом случае должен выглядеть следующим образом:

uses 
{$IFDEF MSWINDOWS} 
    Winapi.Windows, 
{$ENDIF} 
    System.SysUtils; 
+0

+1 Не знал, что у Mac была такая же процедура :-) Обратите внимание, что фактический вызов 'GetProcAddress' в MacOS отличается от Windows, поэтому вам также нужно определить его. – Johan

Смежные вопросы