c++ - 我可以以在加载时可以删除的方式加载 dll 吗?

标签 c++ c windows winapi dll

标题几乎说明了一切..

我想做的是编写一个工具来监视包含插件的 dll 文件,当我覆盖它时,通过重新编译,它应该会自动重新加载它。 我知道我可以制作拷贝,加载拷贝并监控原件,但我认为可能有更好的方法...... 如果我理解正确,dll 已完全加载到内存中,因此删除文件应该没有问题..

最佳答案

不,这不是 Windows 的工作方式。加载 DLL 只是创建一个内存映射文件,除了重定位(如果需要)之外,实际上没有从文件中读取任何内容。直到您的代码调用导出函数。这会导致页面错误,因为代码尚未加载。现在代码从文件中读取到 RAM 中。如果其他进程需要空间,那么这些页面就会被取消映射。在下一个页面错误时再次重新加载。

MMF 对文件进行了硬锁定。您只能重命名它,不能覆盖或删除它。那会使程序崩溃。使用 FreeLibrary() 释放锁。

关于c++ - 我可以以在加载时可以删除的方式加载 dll 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7546912/

相关文章:

c++ - 如何创建一个从两侧都可见的四边形?

c++ - QSettings 如何将 QMap<QString,int> 保存到配置文件中

c++ - C++ 中的简单运算符重载 =

c++ - 链接 UnitTest++ 失败

python - 如何忽略 Pyglet 窗口中的 UI 缩放?

c++ - Windows QueueUserWorkItem C++ Release模式问题

windows - 在 MS Windows 中调用窗口的哪些部分?

c - 使用 rand 生成随机数

c - 这个格式说明符是什么意思?

c++ - std::signal 和 std::raise 线程安全吗?