GetProcAddress

GetProcAddressは、DLLが持つ指定された名前の外部参照可能な関数へのポインタを取得するWindowsAPI・・・。

GetProcAddress 関数
__declspec(dllexport) を使った DLL からのエクスポート

DLLは、DllMainの他に、呼び出し側から参照できる関数を持っており、これを利用することがDLL本来の使い方・・・。

GetProcAddressで指定の関数へのポインタを取得し、ポインタを参照することでその関数を呼び出す・・・。

まず、GetProcAddressプロジェクトを作成し、GetProcAddress.cppにDLLの中身を書いていく・・・。

外部から参照できる関数DllFuncの宣言・・・。
extern "C"で、Cの関数として宣言・・・。
__declspec(dllexport)とすることで、外部参照可能な関数として宣言・・・。

DllMainは、

と前回と同じ・・・。

DllFuncの定義・・・。
呼び出されたら、"DllFunc!"と出力だけ・・・。

これで構成の種類を"ダイナミックライブラリ(.dll)"にしておく・・・。

Mainプロジェクトを追加して、Main.cppに呼び出し側を書く・・・。

引数、戻り値がともにvoidな関数ポインタの型をtypedefでDLLFUNCとする・・・。

DLLFUNC型のDllFuncに関数のポインタを入れる・・・。
LoadLibraryでGetProcAddress.dllをロードするところまで・・・。

GetProcAddressで関数"DllFunc"の関数ポインタを取得し、DllFuncに格納・・・。

"DllFunc()"とすることで、関数として呼び出す・・・。

FreeLibraryでGetProcAddress.dllを解放・・・。

LoadLibrary before.
DLL_PROCESS_ATTACH
hDll = 10000000
DllFunc!
DLL_PROCESS_DETACH
FreeLibrary after.
続行するには何かキーを押してください . . .

このようにロードした後、GetProcAddressを使って関数"DllFunc"のポインタを取得して、関数"DllFunc"を呼び出し、"DllFunc!"と出力できた・・・。

Sample/Main.cpp at master · bg1bgst333/Sample · GitHub
Sample/GetProcAddress.cpp at master · bg1bgst333/Sample · GitHub