Windows桌面应用程序(1-2-1-5th) WinMain:应用程序入口点

每个Windows程序都包含一个名为WinMainwWinMain的入口函数。这是wWinMain的签名。

int WINAPI wWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PWSTR pCmdLine,int nCmdShow);

这四个参数是:

  • hInstance是所谓的”一个实例的句柄”或”一个模块的句柄”。加载到内存中时,操作系统使用此值来标识可执行文件(EXE)。某些Windows功能需要实例句柄,例如加载图标或位图。
  • hPrevInstance没有意义。它在16位Windows中使用,但现在始终为零。
  • pCmdLine包含作为Unicode字符串的命令行参数。
  • nCmdShow是一个标志,说明主应用程序窗口是最小化,最大化还是正常显示。

该函数返回一个int值。操作系统不使用返回值,但是可以使用返回值将状态码传递给您编写的其他程序。
WINAPI是调用约定。调用约定定义了函数如何从调用者接收参数。例如,它定义参数出现在堆栈上的顺序。只要确保如图所示声明你的wWinMain函数。
WinMain函数与wWinMain函数相同,只是命令行参数作为ANSI字符串传递。Unicode版本是首选。即使您将程序编译为Unicode,也可以使用ANSI WinMain函数。要获取命令行参数的Unicode副本,请调用GetCommandLine函数。该函数返回单个字符串中的所有参数。如果您想将参数作为argv-style数组,请将此字符串传递给CommandLineToArgvW
编译器如何知道调用wWinMain而不是标准的main函数?实际发生的情况是,Microsoft C运行时库(CRT)提供了一个调用WinMainwWinMainmain的实现。
注意 CRT在main里做了一些额外的工作。例如,在wWinMain之前调用任何静态初始化器。尽管您可以告诉链接器使用不同的入口函数,但是如果链接到CRT,则使用默认值。否则,CRT初始化代码将被跳过,结果不可预知。(例如,全局对象将不会正确初始化。)
这是一个空的WinMain函数。

INT WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,INT nCmdShow){
    return 0;
}

现在您已经了解了一些基本的术语和编码约定,您已经准备好创建一个完整的Window程序。
下一个
模块1.您的第一个Windows程序。


原文链接:WinMain: The Application Entry Point

返回目录

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值