我正在学习 COM。我在 DLL 中编写了一个简单的 COM 组件,并在注册表中注册了它。然后我创建了一个简单的客户端并尝试使用我的 COM 组件。但我不明白这种DllMain
行为(我也读过这个)。
extern "C" BOOL WINAPI DllMain(
_In_ HINSTANCE hinstDLL,
_In_ DWORD fdwReason,
_In_ LPVOID lpvReserved){
pDll = hinstDLL;
if (DLL_PROCESS_ATTACH == fdwReason){
trace("DllMain(): DLL_PROCESS_ATTACH");
}
else if (DLL_THREAD_ATTACH == fdwReason){
trace("DllMain(): DLL_THREAD_ATTACH");
}
else if (DLL_PROCESS_DETACH == fdwReason){
trace("DllMain(): DLL_PROCESS_DETACH");
}
else if (DLL_THREAD_DETACH == fdwReason){
trace("DllMain(): DLL_THREAD_DETACH");
}
else{
trace("DllMain(): unknown variant...");
}
return TRUE;
}
我希望每个DLL_PROCESS_ATTACH
人DLL_PROCESS_DETACH
都被调用,并且每个DLL_THREAD_ATTACH
人DLL_THREAD_DETACH
都被调用(如果没有发生异常)。
但我看到一个DLL_PROCESS_ATTACH
有两个DLL_THREAD_DETACH
:
为什么会这样?