2012-03-16 6 views
1

Firemonkeyフレームワーク経由でDelphi XE2を使用してプラグインシステムを作成しようとしています。問題は、GetProcAddressが宣言されていない識別子であるというエラーが発生していることです。私がVCLプロジェクトでGetProcAddressを使用しようとすると、すべてうまく動作するので、GetProcAddressとFiremonkeyアプリケーションで使用する方法について、VCLとFiremonkeyの違いは何ですか?FireMonkeyアプリケーションで宣言されていない識別子 'GetProcAddress'

おかげ

答えて

3

GetProcAddressは、Windows APIシステムコールです。
このため、クロスプラットフォームのFMXアプリケーションでは使用できません。

アプリをWindows上でのみ実行する場合は、GetProcAddressが定義されているユニットをuses句に追加できます。

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

は、uses節にWindowsを追加します。 GetProcAddressの話をするときVCLとFireMonkeyの間の差を何であるか

VCLは、クロスプラットフォームであることを、この理由のために追加されません行われているWindows、FireMonkeyの(別名FMX)に特異的に結合され

windowsをデフォルトのuses節に追加します。

+0

docwikiは '()'(http://docwiki.embarcadero.com/RADStudio/en/Cross-Platform_Shared_Libraries)System.SysUtils.GetProcAddressがあることを述べています..しかし、私はここでそれを見つけることができません - > http://docwiki.embarcadero.com/Libraries/en/System.SysUtils – teran

+0

@teran、答えのリンクを参照してください、それは文字通り言う: 'あなたはLoadLibrary、FreeLibrary、GetProcAddressなどのWin32 APIへの直接呼び出しによるライブラリ。これらの関数はWindows.pasで宣言されています。この場合、手続き型変数を使用してインポートされたルーチンを参照してください。 ' – Johan

+0

@teranはDocWikiページのドキュメント間違いのようです。クロスプラットフォーム共有ライブラリについて – mjn

4

Windows用のアプリケーションをコンパイルするときは、Winapi.Windows.GetProcAddressを使用します。そうでない場合は、System.SysUtils.GetProcAddressを使用します。その場合のuses節は次のようになります。

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

+1 Macが同じ手順をしていることを知らなかった:-) MacOSの 'GetProcAddress'への実際の呼び出しはWindowsとは異なるので、そこにも定義が必要です。 – Johan

関連する問題