【发布时间】:2011-09-22 00:05:23
【问题描述】:
我有兴趣将一个成熟的 MFC 应用程序(窗口、菜单、对话框等)应用程序转换为 DLL,以便可以将其带入其他可执行文件的虚拟地址空间。
在我投入太多时间之前,我想知道这是否可行甚至可能。
我认为 CreateProcess 不会起作用,因为它不会(?)将进程带入与调用方相同的地址空间,就像 DLL 那样。
我做了一些研究,发现如下:
MSDN 上的一个页面,“TN011:将 MFC 用作 DLL 的一部分”,这很有用,但是是从您从头开始编写 DLL 的角度编写的。
以下关于 EXE 和 DLL 之间差异的引用:
“应用程序可以拥有诸如堆栈、全局内存、文件句柄和消息队列之类的东西,但 DLL 不能。”
我了解 DLL 的基础知识,但大多数 DLL 不提供与成熟应用程序相同的功能。
将 DLL CRT 启动代码替换为创建一个模拟 WinMain 样式 CRT 启动的新线程就足够了吗?这个想法必然需要将所有这些启动代码从真正的 DllMain 中推出,以避免 DLL 加载锁定。
我是否走在正确的轨道上,或者是否存在一些与 DLL 相关的问题导致这种情况站不住脚?
是否有一些简单的方法可以将 exe 包装到我不知道的 DLL 中?
感谢您阅读本文。
【问题讨论】:
-
您实际上想通过这样做来完成什么?您只想在另一个应用程序中使用此 DLL 中的资源吗?
-
您希望新应用程序调用此 DLL 中的函数吗?还是您希望新应用程序加载 DLL 并启动旧应用程序?如果是后者,那么一个过程听起来像你想要的吗?
-
基本上,我想公开应用程序的代码/数据并允许外部控制/修改应用程序的数据,而不必丢弃大量代码并进行重大重写。保留原始 UI 内容也是有益的。我可能最终不得不尝试另一种解决方案,但我想看看这是否可行。