C++ 我是否可以在加载dll时将其删除';有子弹吗?

C++ 我是否可以在加载dll时将其删除';有子弹吗?,c++,c,windows,winapi,dll,C++,C,Windows,Winapi,Dll,这个标题几乎说明了一切 我要做的是编写一个工具来监控包含插件的dll文件,当我重写它时,通过重新编译,它应该会自动重新加载它。 我知道我可以制作副本、加载副本和监控原件,但我认为可能有更好的方法。。 如果我理解正确,dll将完全加载到内存中,因此删除文件时应该不会出现问题。没有尝试过,我现在不在Windows计算机上,但我认为Windows在加载dll时会锁定文件以防写入。您应该首先检查是否确实覆盖了DLL(例如,通过编译新版本),或者编译器是否抱怨“权限被拒绝” 否则,我想您可以使用来实现您的

这个标题几乎说明了一切

我要做的是编写一个工具来监控包含插件的dll文件,当我重写它时,通过重新编译,它应该会自动重新加载它。 我知道我可以制作副本、加载副本和监控原件,但我认为可能有更好的方法。。
如果我理解正确,dll将完全加载到内存中,因此删除文件时应该不会出现问题。

没有尝试过,我现在不在Windows计算机上,但我认为Windows在加载dll时会锁定文件以防写入。您应该首先检查是否确实覆盖了DLL(例如,通过编译新版本),或者编译器是否抱怨“权限被拒绝”


否则,我想您可以使用来实现您的目标。

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

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