gpt4 book ai didi

c++ - 将完整的应用程序转换为 DLL

转载 作者:可可西里 更新时间:2023-11-01 10:08:48 26 4
gpt4 key购买 nike

我有兴趣将一个成熟的 MFC 应用程序(窗口、菜单、对话框等)应用程序转换成一个 DLL,以便它可以进入其他可执行文件的虚拟地址空间。

在我投入太多时间之前,我想知道这是否可行,甚至可能。

我认为 CreateProcess 不会起作用,因为它不会(?)像 DLL 那样将进程带入与调用者相同的地址空间。


我做了一些研究并发现了以下内容:

MSDN 上的一个页面,“TN011:使用 MFC 作为 DLL 的一部分”,它很有用,但是是从您从头开始编写 DLL 的角度编写的。

以下引用了 EXE 和 DLL 之间的区别:

“应用程序可以拥有诸如堆栈、全局内存、文件句柄和消息队列之类的东西,但 DLL 不能。”


我了解 DLL 的基础知识,但大多数 DLL 不提供与成熟应用程序相同的功能。

用创建模拟 WinMain 样式 CRT 启动的新线程的代码替换 DLL CRT 启动代码是否足够?这个想法必然需要将所有这些启动代码从真正的 DllMain 中推出,以避免 DLL 加载锁定。

我是否在正确的轨道上,或者是否有一些与 DLL 相关的问题使这变得站不住脚?

是否有一些简单的方法可以将 exe 包装到我不知道的 DLL 中?

感谢您阅读本文。

最佳答案

OP 在这里,报告部分成功。

我只是使用了 MFC DllMain 而不是尝试模拟 WinMain 风格的启动。我遇到了一些小问题:show window bool 为 0,GetModule 未按预期工作,但在解决它们后程序启动并正常运行。实际上,非常惊人。

我现在遇到的问题与结束程序有关。关闭窗口不会像通常那样结束程序,它会在不久之后锁定尝试获取消息。 WM_QUIT 解决了这个问题。

这是在同步情况下(rundll32 等待主循环退出)。当我创建一个线程来异步运行程序时,程序使用的众多线程之一在发送 WM_QUIT 后很快崩溃。

就我所知。我不是在寻求建议,只是把它放在那里供后代引用。

关于c++ - 将完整的应用程序转换为 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6467748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com