在客户端exe运行时重新编译MFC DLL

时间:2010-06-24 16:52:11

标签: c++ dll mfc

是否可以在其“客户端”可执行文件正在运行时重新编译MFC DLL,并让可执行文件检测并获取新的更改?如果有可能,这是愚蠢的吗?能够在不重新启动exe的情况下重新编译DLL将在我的编码工作流程中节省一些时间。我使用的是Visual Studio 2008,代码是用本机C ++ / MFC编写的。我的代码更改完全包含在DLL中,而不是EXE。

谢谢!

2 个答案:

答案 0 :(得分:2)

不幸的是,除非可执行文件支持热交换DLL,否则你无法做到。 Windows中的标准DLL加载机制将在进程开始时或首次使用DLL导出的函数时加载它,并且不会在文件中查看更改以便重新加载它。此外,根据DLL的加载方式,文件可能会被锁定以进行更改。

在重新编译之前,您必须停止客户端可执行文件。

答案 1 :(得分:1)

是的,这是可能的。您需要确保可执行文件显式加载您的DLL(通过LoadLibrary)。如果您的可执行文件隐式加载您的DLL,您将遇到Franci描述的问题。

在可执行文件运行时更新库:

  • 定义一些用于暂存新版DLL的约定。它可以位于单独的文件夹中,也可以位于不同的文件名/扩展名中。
  • 有办法检查新版本的DLL。这可能是为了响应用户界面中的某些特定手势,或者您可以监视目录以查看后台线程的更改。
  • 当您看到新版本时,请卸载旧版本(FreeLibrary),然后将其删除并将新版本移至所需位置并重新加载(LoadLibrary)。

如果你的DLL实现了任何COM对象,请告诉我,我会给你一些额外的提示。