VS2008 마법사를 사용하여 MFCApp를 만들었습니다. 내 응용 프로그램의 "InitInstance()"내에서 "LoadLibraryA()"메서드를 호출 할 때 약간의 dll 파일을로드해야합니다. 하지만 "LoadLibraryA()"를 호출하자마자 응용 프로그램의 "InitInstance()"를 다시 호출하므로 무한 재귀 항목이됩니다. 내가 뭘 잘못하고 있니?MFC APP에서 "InitInstance"에서 "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
[email protected]()
[email protected]()
[email protected]()
[email protected]()
[email protected]()
[email protected]()
[email protected]()
MyApp.exe!CLoader_MFCApp::InitInstance() C++
mfc90.dll!AfxWinMain(HINSTANCE__ *, HINSTANCE__ *, char *, int) C++
MyApp.exe!__tmainCRTStartup() C
[email protected]()
"Def.dll는"다른 DLL 및 MyApp를 전혀 관련이 없습니다. 이 경우 다른 dll "CORE.dll"을로드하려고합니다.
내가 알아낼 수있는 것은 InitInstance 루틴이 끝나기 전에 LoadLibrary를 호출한다는 것입니다. InitInstance 이후에 호출되는 다른 (오버라이드 할 수있는) 메서드가 있습니까 ??? 그렇다면 LoadLibrary 호출을 해당 메서드로 이동해 볼 수 있습니다 ...
사용 (또한 DLL의, 가능한 경우) 디버그 빌드, 당신은 호출 스택 게시을 LoadLibrary 이후의 InitInstance를 다시 입력합니다. – peterchen
./abc/def.dll이란 무엇이며 무엇이로드되고 있습니까? 라이브러리 (순환 종속성)를로드하려고합니까? – CashCow
"CLoader_MFCApp"와이 "def.dll"사이의 관계, interdepency는 무엇입니까? – patriiice