鱼C论坛

 找回密码
 立即注册
查看: 1740|回复: 0

[学习笔记] 《WINDOWS程序设计》(012)1.3 你的第一个Windows程序-1.3.4 程序入口

[复制链接]
发表于 2018-10-15 17:32:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.3.4  程序入口

      正像main是C程序的入口一样,Windows的程序入口是WinMain,它总是以下面的面目出现:
      int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
      
      程序入口在/Platform SDK/User Interface Services/Windowing/Windows/Window Reference/Window Functions中有所描述现已经更改为:/MSDN Library/Win32 and COM Development/User Interface/Windows User Interface/windowing/windows/functions/里,并在WINBASE.H中声明如下:
      int
      WINAPI
      WinMain(
                   HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nShowCmd
                 );

      多半儿你已经察觉到我在HelloMsg.c中稍稍做了些改动。第三个参数WINBASE.H中定义为LPSTR,而我(在HelloMsg.c中)却把它改成了PSTR。这两种数据类型在WINNT.H中都声明为指向字符串的指针。前缀LP代表长指针(Long Pointer),它是16位Windows的产物。

      我还改动了WinMain声明中的两个参数名,因为绝大部分Windows程序在变量命名上都采用所谓“匈牙利标记法”(Hungarian Notation)系统。在这一系统中,变量名前都有一个短前缀,用以表明该变量的数据类型。在第3章中,我将详细讨论这一概念。现在只需要记住前缀i表示int,前缀sz表示“以零结尾的字符串”(String Terminated with a Zero)。

      WinMain函数的返回值被定义为int。WINDEF.H中用以下语句来定义WINAPI标识符:
      #define WINAPI _stdcall
这条语句规定了一种函数调用约定,表明如何生成在堆栈中放置函数调用参数的机器代码。绝大多数Windows函数调用都定义成WINAPI

      WinMain的第一个参数一般叫做“实例句柄”(Instance Handle)。在Windows程序中,句柄无非就是一个数值,程序里用它来标识某些东西。比如在我们这个例子里,这个句柄就唯一标识了我们的这个程序。实际上在某些Windows程序中,把句柄当作调用参数是必须的。比如在早期的Windows版本中,当多路并发运行同一个程序的时,就需要为那个程序创建多个实例。同一程序的所有的实例都共享代码以及只读存储(即菜单或者对话框之类的模板资源)。一个程序可以通过查看hPrevhInstance参数从而知道是否有它的其他实例正在运行。它也就可以因此跳过某些零散杂务步骤,把一些数据从前一个实例搬到自己的数据区来。【系统运行时由操作系统赋值或者给予参数值】

      
在32位的Windows中,这一概念已不再用。因此WinMain的第二个参数通常总是NULL(定义为0)。

      WinMain的第三个参数是用来运行程序的命令行(Command Line)。有些Windows程序在启动时用它来把文件装入内存。WinMain的第四个参数用来指明程序最初如何显示【用字符模式输入执行文件时,可以使用】;或正常显示,或最大化到全屏,或最小化显示在任务栏。我们将在第3章里讨论这一参数的使用。


本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 01:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表