2

C++ コンソール アプリケーションと DLL があります。C++ アプリケーションでは、次のスニペットが表示されます::

typedef DWORD (WINAPI* functABC)(unsigned long*);

functABC functABC111;
HMODULE handleDLL = LOadLibrary("a.DLL");
functABC111 = (functABC)GetProcAddress(handleDLL,"function_1");

大まかに言えば、a.DLL "function_1()" 内の関数への関数ポインタを取得していることを理解しています。

しかし、上記のスニペットの最初の 2 行を理解したい::

typedef DWORD (WINAPI* functABC)(unsigned long*);
functABC functABC111;

2 つの質問 :: 1) 「functABC」という名前は単なるランダムな関数ポインタ名ですか?
2) この 2 行で技術的に何をしているのか。関数ポインタを宣言しています。
3) 1 行目の関数ポインタ宣言で WINAPI* を使用する必要があるのはなぜですか。

前もって感謝します。

4

3 に答える 3

3

3) ほとんどすべての Windows 関数 (shell32.dll、user32.dll、およびその他すべて) は__stdcall、またはWINAPI(同じもの) として宣言されます。DLL 内の関数を WINAPI として宣言する必要はありませんが、Microsoft の指示に従っているだけです。コードは数バイト小さくなり、実行は数ナノ秒短くなります。

于 2013-09-20T09:20:02.290 に答える