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

2017-12-26 19:10:48来源:CSDN作者:qq_37422196人点击

分享

每个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在里做了一些额外的工作。例如,在wWinMain之前调用任何静态初始化器。尽管您可以告诉链接器使用不同的入口函数,但是如果链接到CRT,则使用默认值。否则,CRT初始化代码将被跳过,结果不可预知。(例如,全局对象将不会正确初始化。)
这是一个空的WinMain函数。

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

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


原文链接:WinMain: The Application Entry Point

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台