Last Updated 2002/03/22
Programming Tips Visual C++ DLL  索 引 
DLL関数の動的呼び出し
2002/03/22

DLL 内の呼び出したい API が以下の型の場合
   BOOL WINAPI HogeHogeAPI(int nIndex, LPSTR lpszBuf);

// 目的の関数(API)へのポインタを宣言(ここで typdedef を使えばもっと便利)
// BOOL (WINAPI * lpHogeHogeAPIEntryPoint)(int, LPSTR); // 素の宣言方法
typedef BOOL (WINAPI *LPFNHOGEHOGEAPI)(int, LPSTR); // typedef宣言方式
                      ^^^^^^^^^^^^^^^
                             ↓
                       ここは自由に名前を決める

// 目的の DLL をロード
HINSTANCE hLib = LoadLibrary("XXXXXX.DLL");
if(hLib < (HINSTANCE)HINSTANCE_ERROR) {
    // エラー処理
}
// DLL 内の HogeHogeAPI の関数アドレスを取得する
// FARPROC lpHogeHogeAPIEntryPoint;
LPFNHOGEHOGEAPI   lpHogeHogeAPIEntryPoint; // 関数へのポインタ宣言
lpHogeHogeAPIEntryPoint =
                    (LPFNHOGEHOGEAPI)GetProcAddress(hLib, "HogeHogeAPI");
if (lpHogeHogeAPIEntryPoint == NULL) {
    // エラー処理
}
// DLL の HogeHogeAPI の呼び出し
BOOL bRet = (*lpHogeHogeAPIEntryPoint)(0, "ABCDEFG");

FreeLibrary(hLib); // DLL をメモリから解放します。


LoadLibrary の方式では,Lib(インポートライブラリ)は必要ない.


参照
前後のTips
DLL関数の動的呼び出し

DSS ProgrammingTipsCGI Ver2.02