C++ 是否可以从常规main调用WinMain?

C++ 是否可以从常规main调用WinMain?,c++,windows,winapi,C++,Windows,Winapi,特别是,是否有一种方法可以创建windows应用程序而不直接使用“新建项目”向导指定它?显然,简单地包含“windows.h”并不会自动创建一个主函数,因此,如果我想“从头开始”创建一个windows应用程序,我该怎么做?当程序启动时,会调用启动或启动函数。此函数的定义包含在通常自动链接到的库中。在标准C程序中,它将执行一些启动操作,然后调用main函数 这就是标准C程序中发生的情况,但是您可以使用WinMain,这不是标准的。如果main不存在,但WinMain存在,它将使用适当的参数调用Wi

特别是,是否有一种方法可以创建windows应用程序而不直接使用“新建项目”向导指定它?显然,简单地包含“windows.h”并不会自动创建一个主函数,因此,如果我想“从头开始”创建一个windows应用程序,我该怎么做?

当程序启动时,会调用
启动
启动
函数。此函数的定义包含在通常自动链接到的库中。在标准C程序中,它将执行一些启动操作,然后调用
main
函数

这就是标准C程序中发生的情况,但是您可以使用
WinMain
,这不是标准的。如果
main
不存在,但
WinMain
存在,它将使用适当的参数调用
WinMain


因此,不必具有
main
功能
WinMain
就是为了达到这个目的,而不是
main

icktoofay的答案基本上是正确的,只剩下一部分:

这就是标准C程序中发生的情况,但是您可以使用
WinMain
,这不是标准的。如果
main
不存在,但
WinMain
存在,它将使用适当的参数调用
WinMain


应用程序的第二入口点(由
start
\u start
调用的函数)的决定因素是指向链接器的


如果您是手动构建,可以将
/SUBSYSTEM
开关添加到链接器命令行,以指定您正在构建Windows应用程序(需要
WinMain
wWinMain
入口点),而不是控制台应用程序(需要
main
wmain
入口点)。如果您是从VisualStudio构建的,您可以选择C++项目属性的链接器设置中的子系统。

因为签名是“代码> WINMAN(HStuttHeStase,HSPuff-HPvProject,LPSRTLPCMDLINE,INTCMCDSID)。如何创建
HINSTANCE
?@sircodesalot-
HINSTANCE
在“windows.h”中定义“所以只要
#包括
就行了,但这需要以某种方式传递到
WinMain
,那么我该怎么做呢?@sircodesalot:
start
会呼叫您。不过,为什么不首先使用
WinMain
WinMain
不需要比
main
更多的特殊处理;我只使用命令行编译器工具就成功地创建了包含
WinMain
的小型应用程序。我同意。GCC很好,可以接受
intmain()
WinMain
而不需要任何项目。嗯,什么编译器?什么环境?最简单的程序包含主函数(C++标准要求),您只需在其上的shell中运行编译器即可-您根本不需要任何智能向导。请在visual Studio中尝试这一点,以供~future~阅读此文的读者使用。从那以后,我(通过C++从Windows了解到)可以通过进入“项目>属性>配置属性>链接器>系统>子系统”来切换子系统(在Visual Studio中)。如果将其设置为“未设置”,则可以使用
main
WinMain
(编译器将推断)。正如Windows通过C++所提到的那样,这可能是默认设置的(不是),但是Win32编程中还有很多古怪的地方。我觉得这是一个完整的新手,但什么是<代码>开始<代码>?我已经编程多年(虽然不是C++,虽然我还没有新的),也从来没有听说过。<代码>开始<代码>或代码>启动> <代码>是一个函数,它由你使用的C运行时自动链接到(如微软Visual C++运行时或GLYBC),这会处理一些初始化细节,并为您调用入口点(如
main
WinMain
)。它可以初始化全局变量和静态变量,并准备入口点的参数。所有这些都是在后台以透明和无声的方式发生的。啊,本质上我需要停止并开始一个wuss,学习编译/链接。谢谢。老实说,运行时提供的入口点是一个实现细节,您不需要了解很多就可以继续前进。只需确保您了解编译器和链接器选项,这样您的结果就可以达到预期效果。