我正在编写一个需要多次动态调用单独的 DLL 的 DLL。我想保持被调用者加载,然后在卸载我的 DLL 时将其卸载。但根据微软的说法,这是个坏主意。
入口点函数只应执行简单的初始化任务,不应调用任何其他 DLL 加载或终止函数。例如,在入口点函数中,不应直接或间接调用 LoadLibrary 函数或 LoadLibraryEx 函数。此外,您不应在进程终止时调用 FreeLibrary 函数。
这是有问题的代码。有人可以解释为什么我不应该从我的 DLL 入口点调用 LoadLibrary 和 FreeLibrary 吗?
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call) {
case DLL_PROCESS_DETACH :
if (hLogLib != NULL) FreeLibrary(hLogLib);
break;
}
return TRUE;
}