| 午後のこ〜だ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)の実行 }