标题几乎说明了一切..
我想做的是编写一个工具来监视包含插件的 dll 文件,当我覆盖它时,通过重新编译,它应该会自动重新加载它。 我知道我可以制作拷贝,加载拷贝并监控原件,但我认为可能有更好的方法...... 如果我理解正确,dll 已完全加载到内存中,因此删除文件应该没有问题..
最佳答案
不,这不是 Windows 的工作方式。加载 DLL 只是创建一个内存映射文件,除了重定位(如果需要)之外,实际上没有从文件中读取任何内容。直到您的代码调用导出函数。这会导致页面错误,因为代码尚未加载。现在代码从文件中读取到 RAM 中。如果其他进程需要空间,那么这些页面就会被取消映射。在下一个页面错误时再次重新加载。
MMF 对文件进行了硬锁定。您只能重命名它,不能覆盖或删除它。那会使程序崩溃。使用 FreeLibrary() 释放锁。
关于c++ - 我可以以在加载时可以删除的方式加载 dll 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7546912/