dev 如何在C++中强制卸载库(Dev C++编译器)

dev How force unload library in C++ (Dev C++ compiler)?

本文关键字:C++ Dev 编译器 卸载 dev      更新时间:2023-10-16

我看到一个Delphi(Object Pascal)代码,它强制卸载在我的软件中加载的任何模块(dll)。然后有了这段代码中的 base,我现在想要并且需要类似的东西C++(Dev C++)。

有人可以帮我吗?

这是我看到的德尔福代码:

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 将在其每个进程的引用计数变为零时从内存(即执行进程的地址空间)中卸载;如果另一个进程仍然持有引用,则不能通过重复执行 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));
}