int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
前面我们已经强调过了,windows图形界面的应用程序的入口函数名必须为WinMain ,而且调用约定必须为_stdcall。因为入口函数是由操作系统来调用的。既然如此,该函数的四个参数也是由操作系统来赋值的。
下面我们来解释一下这四个参数的含义:
- HINSTANCE hInstance
应用程序实例句柄,当用户运行应用程序时,就会创建一个应用程序实例句柄。该句柄的本质是进程句柄。一个应用程序运行时,操作系统就会创建一个进程,一个主线程(线程函数为WinMain )。进程创建的同时会返回一个进程句柄,操作系统以及其他的应用程序可以通过进程句柄来管理进程,如:终止进程的执行,或通过管道向进程传递数据等。
2.HINSTANCE hPrevInstance
前一个实例句柄,一个应用程序可以运行很多次,每次都会创建一个实例句柄。
3. PSTR szCmdLine
命令行参数,当我们通过命令方式启动一个应用程序时,可以在命令中输入相应的参数。
比如DOS命令中的CD命令:C:\>CD WINDOWS,其中 WINDOWS就是该命令的参数。
我们在E盘根目录下创建一个简单的win32应用程序,项目名为comdline:
#include "windows.h"
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MessageBox(NULL,lpCmdLine,"命令行参数",MB_OK);//显示命令行参数
return 0;
}
添加如上面粗体的代码。用一个对话框来显示命令行参数。
编译链接后,生成可执行文件。可执行文件在e:\comdline\debug目录下。
下面我们通过控制台来运行该程序。
1)点开始菜单,点运行。
2)输入CMD
3)点确定,将启动控制台窗口。
4)在控制台中输入如下图1-8所示一组命令:
可见,我们输入的命令行参数在messagebox消息框中显示出来了。
其中:
第一行命令是将路径转换到E盘根目录。
第二行和第三行命令是将当前路径设置为comdline.exe可执行文件的目录中。
第四行命令是通过命令行参数的形式来运行程序,并将“同志们好,首长好!”作为命令行参数来启动应用程序。
4. int iCmdShow
表示该应用程序窗口是否显示。