Я создал MFCApp с помощью мастера VS2008.Внутри моего приложения "InitInstance ()" я вызываю метод LoadLibraryA (), так как мне нужно загрузить несколько DLL-файлов.Но как только я вызываю «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"
Все, что я могу понять, это то, что я вызываю LoadLibrary до того, как процедура InitInstance закончилась.Есть ли другой (переопределенный) метод, который вызывается после InitInstance ???Если это так, я могу попробовать перенести вызовы LoadLibrary на этот метод ...