- 呼び出すDLL関数の構造体をHMODULE と 関数ポインタで使いたい関数を設定しておく
- DLL関数の構造体のHMODULEにLoadLibraryを使って読み込みます。
- DLL関数の構造体の関数ポインタにGetProcAddress関数を使って関数ポインタのアドレスを取得します。
- DLL関数の構造体の関数ポインタを使ってDLLの関数を呼び出します。
- DLL関数の構造体のHMODULEをFreeLibraryを使って解放します。
//ヘッダーファイル
//User32.dllの関数ポインタ
struct user32Function
{
HMODULE m_DLL; //DLLのモジュールハンドル
int (__stdcall*) MessageBoxFunc(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption,UINT uType);
};
extern user32Function user32;
//User32.dllをロードする
if (user32.m_DLL == NULL)
{
user32.m_DLL = LoadLibrary(_T("User32.dll");
//MessageBoxAの関数ポインタを設定する
user32.MessageBoxFunc = (int(__stdcall*)(HWND, LPCSTR, LPCSTR, UINT))GetProcAddress(user32.m_DLL, "MessageBoxA");
}
user32.MessageBoxFunc(NULL, "テスト", "テスト", MB_OK);
if( user32.m_DLL ){
FreeLibrary(user32.m_DLL);
}
ちなみにDXライブラリのDxWinAPI.h/DxWinAPI.cppより参考にしています。