可以Dllmain使用FreeLibrary吗?

时间:2011-12-27 16:36:54

标签: c++ c winapi dll

我想创建一个在某些条件下自行卸载它的dll,意思是

BOOL APIENTRY DllMain( HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
if (ul_reason_for_call==DLL_PROCESS_ATTACH)
if (!CheckSomething()) //check if a file doesnt exists for example
FreeLibrary(hModule);

}

我试过了,但我无法让它发挥作用。如果有替代解决方案。请告诉我,我不希望附加dll的进程卸载它,我希望它自己卸载

2 个答案:

答案 0 :(得分:14)

您无法卸载DLL,尚未加载。这就是BOOL回报的含义。如果您不想加载DLL,请返回FALSE

答案 1 :(得分:0)

如果你在dll main函数中调用FreeLibrary,你必须看到崩溃消息。 因为,FreeLibrary函数调用成功。但FreeLibrary的返回地址是释放内存。 因此,进程导致崩溃!(访问冲突)。

如果你想看到" Dll Self Unloading"源代码:Dll Self Unloading