研究下DllMain为什么会因为不当操作导致死锁的问题。首先我们看一段比较经典的“DllMain中死锁”代码。
//主线程中
HMODULE h = LoadLibraryA(strDllName.c_str());
// DLL中代码
static DWORD WINAPI ThreadCreateInDllMain(LPVOID) {
return 0;
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
DWORD tid = GetCurrentThreadId();
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH: {
printf("DLL DllWithoutDisableThreadLibraryCalls_A:\tProcess attach (tid = %d)\n", tid);
HANDLE hThread = CreateThread(NULL, 0, ThreadCreateInDllMai