我正在使用宏创建main,并且需要能够在编译时检查所选的SubSystem、/SUBSYSTEM:WINDOWS或/SUBSYSTEM:CONSOLE,以便生成适当的main函数。有没有我可以检查的#define来实现这一点?
发布于 2011-01-30 06:02:44
如果你想让你的库(或者其他库)的用户使用起来更简单,你可以从你的宏中生成WinMain和main。默认情况下,链接器将控制台应用程序设置为从main启动,将win32应用程序设置为从WinMain启动。另一个"main“函数将被忽略。
(假设代码的其余部分不使用任何主函数参数(argc、argv、hInstance等),如果要同时使用这两个参数的话。)
可以使用_CONSOLE定义,但它不会自动出现;您必须手动将其添加到项目属性中。另一方面,启动符号的选择是自动的。因此,仅仅提供这两个功能,并让链接器选择,可能会让生活变得更容易,因为项目创建者不需要设置任何东西,而且确实可以从windows切换到控制台应用程序(甚至可能是按配置),而不需要做任何事情。
发布于 2011-01-30 04:27:31
_CONSOLE应该可以帮你完成这项工作。
如果您真的想走这条路,也可以使用#pragma comment( linker, "/subsystem:windows" )或#pragma comment( linker, "/subsystem:console" )选择子系统。
发布于 2011-01-30 05:04:39
这并不是它真正的工作方式。你必须在控制台应用程序和原生Windows应用程序中编写截然不同的代码。在控制台应用程序中,您使用printf或cout来生成输出,如果有鼠标的话也没有太多用处。原生Windows应用程序需要一个消息循环,并使用检测WM_PAINT消息以更新窗口的窗口过程来创建窗口。等等。
但是您可以编写同时完成这两个任务的代码。只需编写一个main()和一个WinMain()函数,CRT就会自动调用正确的函数。
https://stackoverflow.com/questions/4839181
复制相似问题