GUI 剖析 之初识main函数 起草人:天策

二)、初识main函数

我相信您一定写过C程序,那您一定知道C程序的main函数,我也绝对相信你写的main函数不是int main() 就是 void main(),也就是没有参数,可是真正的main函数是有参数的,原型是:int main(int argc,char *argv[],char *envp[]),不知道吧,呵呵,下面来看看这些参数吧。

Argc:命令行参数个数

Argv:命令行参数

Envp:环境变量

 

为什么要有这些参数呢,又为什么我们的C程序没有这些参数呢?

我们知道main函数作为应用程序的入口点,它为操作系统访问提供了一个渠道,main函数肯定是由操作系统调用的,其他用户程序是没有资格的,当操作系统打开应用程序时,它并不是马上去访问main函数,而是要进行多步的准备工作,首先它会分配空间,然后创建主进程,根据用户访问方式确定命令行,确定环境变量,最后查找main函数,什么是命令行?举个例子吧。如果您的PC是win 7或win vista,现在不妨按照我下面的步骤走一遍:

在桌面上右击鼠标,选择个性化,点击屏幕保护程序,此时您在下拉列表框内选择一项屏保,该屏保会在小窗口内显示,如果点击预览,会在整个桌面内显示, 这两种不同的结果,在windows内部其实是通过命令行实现的,要知道GUI程序是基于消息的,而用户的鼠标点击是响应命令的,我曾经参考过一些网上资料写了一个屏保程序,其实,屏保的命令行是“\t”,其他命令行可以参考网上资料,google是很强大的,尽管它的服务器不是很稳定。

 

现在解释下什么是环境变量。如果您写过java程序,那么您一定听过环境变量这个名词,因为java 有个jdk,您写java程序就必须安装它,这时就要设置环境变量,现在来看看在哪设置吧:(win 7 /win vista)在您PC上的的计算机图标上右击鼠标,选择属性->高级系统设置->环境变量,这时你就会发现环境变量,其实环境变量就是一组路径,应用程序启动,其实关联着一个环境块,这个环境块就是程序运行查找资源(包括.dll,.xml,声音资源,图片资源等)的路径,一般地,操作系统查找原则是这样的:

1.      SYSTEM32目录

2.      Windows目录

3.      可执行文件运行当前目录

4.      环境变量

如果您还是不相信,您可以更改您的电脑上的小游戏的一些资源文件名(假设您有绝对权限可以更改,关于权限的问题,可以参考《windows核心编程》),再次运行游戏,看看结果怎样。

好了现在来讲讲winmain函数吧(GUI)

Winmain 函数原型:

Int winapi winmain(HINSTANCE hInstance , HINSTANCEhPrevInstance,PTSTR pszComandline,INT nCmdShow);

hInstance:实例句柄

hPrevInstance:上一个实例句柄

pszComandline:命令行

nCmdShow:窗口显示标志

 

参数解释:

hInstance:实例句柄

hPrevInstance:上一个实例句柄

这两个参数的解释,用个例子说明:

我相信您一定上过网,那么您现在打开百度网页,再次打开百度网页,重复多次,现在打开资源管理器(三种方法:1.在任务栏点击鼠标右键选择“启动资源管理器”,2.同时按下ctrl+alt+del 3.同时按下shift+ctrl+Esc),会看见有多个百度网页任务,这就是实例,一个任务是一个实例,您可以点击PC 上其他软件,启动它,再次双击,再次启动它(有些程序只支持一个实例,这里不论,下面再论),这些都是实例,而参数hPrevInstance就是您当前实例的上一个实例,懂了吧。

只能运行一个实例问题:

您玩过DNF(地下城与勇士)吗?你玩过诛仙吗?如果玩过,您将会明白一切。

DNF 只支持一个实例,诛仙可支持多个实例

我写过一个程序,就是只支持一个实例,现在告诉你核心代码:

进入 winmain 函数就要执行它:

HANDLEh=CreateMutex(NULL,FALSE,TEXT("zhengjinwei-zjw-tiance"));

         if(GetLastError()==ERROR_ALREADY_EXISTS)

         {

                   MessageBox(NULL,TEXT("当前已有Music Test实例在运行!\n郑金玮"),TEXT("天策提示"),MB_ICONINFORMATION);

                   CloseHandle(h);

                   return0;

         }

 

好了其他两个参数可以参考上面对main 函数的解释。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值