dev 如何在C++中强制卸载库(Dev C++编译器)
dev How force unload library in C++ (Dev C++ compiler)?
我看到一个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));
}
相关文章:
- 请发现它在 dev 中工作的错误,但在 hackerrank 中不起作用
- 无法在 dev-c++ 上编译程序?
- Dev c++ mingw 不再编译
- 如何在 Windows 上将bcrypt_gensalt与 /dev/urandom 一起使用?
- 我正在使用dev c ++,但收到错误(C++98'array'必须由构造函数初始化)
- dev Wx Dev C++ vs Graphics.h?
- dev如何在C++中比较二进制数
- 在linux中为c++dev配置VSCode
- DEV C++ 第 69 行 [错误] ISO "for" 范围更改了"i"的名称查找 [-允许]
- dev在试图从dev c++mingw 4.8.1中的文件读取时接收分段错误
- 我有一个C++函数,它在Dev C++中编译,但在G++中不编译
- 写入/dev/ttyS0后读取0字节
- 如何将 stderr 重定向到 /dev/null
- 如何创建C++DLL(使用DEV -C++)并在MT4脚本中使用(逐步)
- auto 关键字在 Dev c++ 中不起作用
- 从 win 7 升级到 Win 10 后,出现 Dev-C++ makefile.win 编译错误
- 如何检测 ofstream 是否正在写入 /dev/null
- 如何将 libproxy-dev 链接到现有的 cmake 项目(C++)?
- 在哪里调用主函数(dev c ++)
- mmap with /dev/input/event*