我想创建一个在某些条件下自行卸载它的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的进程卸载它,我希望它自己卸载
答案 0 :(得分:14)
您无法卸载DLL,尚未加载。这就是BOOL
回报的含义。如果您不想加载DLL,请返回FALSE
。
答案 1 :(得分:0)
如果你在dll main函数中调用FreeLibrary,你必须看到崩溃消息。 因为,FreeLibrary函数调用成功。但FreeLibrary的返回地址是释放内存。 因此,进程导致崩溃!(访问冲突)。
如果你想看到" Dll Self Unloading"源代码:Dll Self Unloading