出错信息:
加载riched20.dll,程序Debug窗口就不动了。并且_tWinMain也无法进入。
'Test111.exe': Loaded 'C:\Windows\System32\riched20.dll', No symbols loaded.The program '[5812] Test111.exe: Native' has exited with code 0 (0x0).
1.在Test111的InitInstance打断点,无法进入。
2.在_tWinMain打断点还是无法进入。
不过此后发现.exe加载Dll的方法是先调用每一个Dll的InitInstance来初始化需加载的Dll,待所有的Dll都加载成功后,才调用
_tWinMain来启动主程序。
我然后挨个查找Test111.exe所依赖的Dll里面的初始化方法(对于MFC程序,就是InitInstance方法)。
但是哪里调用了这个InitInstance方法呢?
这你得找到C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\src\mfc\dllmodul.cpp里面有个
extern "C"
BOOL WINAPI InternalDllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
...
// 这里是以此初始化每个DLL的
CWinApp* pApp; pApp = AfxGetApp();
if (pApp != NULL && !pApp->InitInstance()) {
// ...
}
...
}然后我就发现我的一个DLL没有返回。故此主程序的Debug窗口就死锁了。
DLL加载导致程序死锁
本文探讨了一种情况,即当程序加载特定DLL时遇到问题,导致程序调试窗口停止响应且无法进入_tWinMain函数。问题根源在于一个DLL的InitInstance方法未正确返回,从而阻止了主程序的进一步执行。
2万+

被折叠的 条评论
为什么被折叠?



