午後のこ〜だDLLの読み込み手順 |
午後のこ〜だDLLは、以下のような手順で取得してください。
サンプルプログラム : stab.cpp
hModuleHandle =
LoadLibrary("gogo.dll");
#define Key HKEY_CURRENT_USER #define SubKey "Software\\MarineCat\\GOGO_DLL" HKEY hKey; DWORD dwType, dwKeySize; LONG lResult; static char *szName = "INSTPATH"; char szPathName[ _MAX_PATH + 8]; dwKeySize = sizeof( szPathName ); // レジストリ項目の HEY_CURENT_USER\Software\MarineCat\GOGO_DLL // キー以下の INSTPATH (REG_SZ)を取得します。 if( RegOpenKeyEx( Key, SubKey, 0, KEY_ALL_ACCESS, &hKey ) == ERROR_SUCCESS ){ lResult = RegQueryValueEx( hKey, szName, 0, &dwType, (BYTE *)szPathName, &dwKeySize); RegCloseKey(hKey); if( lResult == ERROR_SUCCESS && REG_SZ == dwType ){ // レジストリから取得したパスで再度DLLの読み込み hModule = LoadLibrary( szPathName ); } }
以下の処理で読み込みが失敗した場合は、アプリケーション側で読み込み失敗の処理(表示)を行ってください。
関数のエクスポートを取得します。 この際、アプリケーションで使用する可能性のある関数のエクスポートが 正しく取得できるか確認してください。 参照可能な関数のエクスポート名・及びプロトタイプ宣言を以下に示します
エクスポート名称 | プロトタイプ宣言 |
"MPGE_initializeWork" | MERET (*me_init)(void); |
"MPGE_setConfigure" | MERET (*me_setconf)(MPARAM mode, UPARAM dwPara1, UPARAM dwPara2 ); |
"MPGE_getConfigure" | MERET (*me_getconf)(MPARAM mode, void *para1 ); |
"MPGE_detectConfigure" | MERET (*me_detect)(); |
"MPGE_processFrame" | MERET (*me_procframe)(); |
"MPGE_closeCoder" | MERET (*me_close)(); |
"MPGE_endCoder" | MERET (*me_end)(); |
"MPGE_getVersion" | MERET (*me_getver)( unsigned long *vercode, char *verstring ); |
"MPGE_getUnitStates" | MERET (*me_haveunit)( unsigned long *unit ); |
以下に取得および使用方法の例を示します。typedef MERET (*me_init)(void); // プロトタイプ宣言の設定 static me_init initfunc; // 初期化関数の定義 initfunc = (me_init )GetProcAddress( hModule, "MPGE_initializeWork" ); if( initfunc == NULL ){ // 正しくexportが取得できなかった処理 printf("DLLの関数取得に失敗\n"); exit(-1); } else { // 正しくexportが取得できた場合 initfunc(); // iniufunc(MPGE_initializeWork)の実行 }