我看到了一个Delphi(对象Pascal)代码,该代码强制卸载软件中加载的任何模块(dll)。然后,在此代码的基础上,我现在需要C ++(Dev C ++)中的类似功能。
有人可以帮我吗?
这是我看到的Delphi代码:
procedure ForceRemove(const ModuleName: string);
var
hMod: HMODULE;
begin
hMod := GetModuleHandle(PChar(ModuleName));
if hMod=0 then
exit;
repeat
until not FreeLibrary(hMod);
end;
最佳答案
功能
HMODULE GetModuleHandle(LPCTSTR modulename)
BOOL FreeLibrary(HMODULE)
是Windows API的功能。可以从支持Windows API编程的任何语言(如C ++)中调用它
仅建议:删除上面示例中的循环(重复执行,直到没有...)。应该用解释对FreeLibrary的调用的返回值的代码代替,这里的文档:https://msdn.microsoft.com/en-us/library/windows/desktop/ms683152(v=vs.85).aspx
一旦DLL的每个进程引用计数变为零,该DLL就会从内存中卸载(即执行进程的地址空间)。如果另一个进程仍然持有引用,则无法通过重复执行FreeLibrary()来强制全局卸载DLL。
编辑:将OP的示例直接转换为C ++代码段:
void ForceRemove(LPCTSTR ModuleName)
{
HMODULE hMod;
hMod = ::GetModuleHandle(ModuleName);
if(hMod==0)
return;
/* DISCLAIMER potentially infinite loop
* not advisable in production code,
* included by request of the OP to
* match his original */
while(::FreeLibrary(hMod));
}
关于c++ - 如何在C++(Dev C++编译器)中强制卸载库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34884509/