VS2008 ウィザードを使用して MFCApp を作成しました。アプリケーションの「InitInstance()」内で、いくつかの dll ファイルをロードする必要があるため、「LoadLibraryA()」メソッドを呼び出しています。しかし、「LoadLibraryA()」を呼び出すとすぐに、アプリケーションの「InitInstance()」が再び呼び出されるため、無限再帰になります。私が間違っていることはありますか?
// CLoader_MFCApp initialization
BOOL CLoader_MFCApp::InitInstance()
{
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinAppEx::InitInstance();
SetRegistryKey(_T("MyApp"));
HMODULE hm = LoadLibraryA("./abc/def.dll");
// after above line InitInstance() gets called again
// more code
return FALSE;
}
コール スタック:
MyApp.exe!CLoader_MFCApp::InitInstance() C++
CORE.dll!InternalDllMain(HINSTANCE__ *, unsigned long, void *) C++
CORE.dll!__DllMainCRTStartup(void *, unsigned long, void *) C
CORE.dll!_DllMainCRTStartup(void *, unsigned long, void *) C
ntdll.dll!_LdrpCallInitRoutine@16()
ntdll.dll!_LdrpRunInitializeRoutines@4()
ntdll.dll!_LdrpLoadDll@24()
ntdll.dll!_LdrLoadDll@16()
kernel32.dll!_LoadLibraryExW@12()
kernel32.dll!_LoadLibraryExA@12()
kernel32.dll!_LoadLibraryA@4()
MyApp.exe!CLoader_MFCApp::InitInstance() C++
mfc90.dll!AfxWinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int) C++
MyApp.exe!__tmainCRTStartup() C
kernel32.dll!_BaseProcessStart@4()
「Def.dll」はその他の dll であり、MyApp とはまったく関係ありません。この場合、別の dll "CORE.dll" をロードしようとしています。
私が理解できるのは、InitInstance ルーチンが終了する前に LoadLibrary を呼び出しているということだけです。InitInstance の後に呼び出される他の (オーバーライド可能な) メソッドはありますか? もしそうなら、LoadLibrary 呼び出しをそのメソッドに移動してみることができます...