加入两个程序 一个与 main() 一个与 WinMain()

Posted

技术标签:

【中文标题】加入两个程序 一个与 main() 一个与 WinMain()【英文标题】:Joining two programs one with main() one with WinMain() 【发布时间】:2011-04-22 09:27:54 【问题描述】:

我想将两个程序组合成一个可执行文件。一个是具有相当复杂项目文件的开源程序,另一个是我的一个具有更简单结构的程序。由于项目文件的相对复杂性,我认为从开源项目开始并对其进行修改以包含我的源文件是最有意义的。

我的意图是我的程序应该受到控制,并将另一个程序视为实用函数的集合。

我注意到开源程序有一个名为“main()”的函数,而我的有一个“WinMain()”。大概我必须告诉编译器首先调用我的 WinMain() 。我该怎么做?

在合并过程中我还有什么需要注意的吗?

编辑: 两个程序都是 C++,而不是 C。

编辑:开源程序做的 io 很少。

编辑: 我想知道的关键是我是否必须在项目设置中修改某些内容以说明“这是一个使用 WinMain() 而不是控制台(?)程序使用 main()" 或者编译器会以某种方式自己解决这个问题。

更新:联合计划现已启动并运行。

【问题讨论】:

-1 - 回答问题需要先上几节 C++ 101 课程。 【参考方案1】:

如果命令行程序的main 函数需要初始化,您需要重命名它并从WinMain 调用它。如果没有,您可以完全删除它。 #if...#else...#endif 在任何一种情况下都很好。

重要的是链接器不再找到名为main 的函数。

Peter's answer addresses some other problems 在移植过程中您可能会遇到与mainWinMain 没有直接关系的情况。

【讨论】:

【参考方案2】:

main 表示你有 C 或 C++ 程序,WinMain 表示你有 Windows 程序,两者不能轻易结合。

我建议您从 Visual Studio 中的 Windows 程序开始,然后添加您需要的以及其他源文件中的方法/类/函数。

【讨论】:

这并不比合并两个命令行程序更难,这两个程序都希望控制 I/O、命令行参数等。【参考方案3】:

如果你的程序有WinMain(),它可能是一个Windows程序,而另一个是一个命令行应用程序。根据原始应用程序的实际用途,这可能会使它们难以合并。例如。如果其他应用程序广泛使用标准输入/输出,则将其转换为 Windows 应用程序具有挑战性。但是,如果它只是一堆没有副作用的实用方法,您可以简单地将代码添加到您的项目中并开始使用它。

您必须设置项目以生成 Windows 可执行文件,然后链接器会自动安排对您的 WinMain() 函数的调用。

【讨论】:

另一个程序做的 io 很少。我可以修改它尝试打印的少数情况。

以上是关于加入两个程序 一个与 main() 一个与 WinMain()的主要内容,如果未能解决你的问题,请参考以下文章

win32两个应用程序窗口之间进行进程通信要怎么写

xntserver是啥文件,还有jsjkjsjk开机就弹出这两个,WIN10系统?

xntserver是啥文件,还有jsjkjsjk开机就弹出这两个,WIN10系统?

Windows Server 2012活动目录基础配置与应用(新手教程)之3---将客户机加入到指定域

WIN32 汇编直接CALL 与间接CALL ?

git如何合并两个分支代码