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

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

我看到一个 Delphi (Object Pascal) 代码强制卸载我的软件中加载的任何模块 (dll)。然后在这段代码中使用 base,我现在想要并需要在 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 的 return 值的代码替换,文档在这里:https://msdn.microsoft.com/en-us/library/windows/desktop/ms683152(v=vs.85).aspx

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