
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
昨天昆明达内官网小编看了一篇关于winMain函数消息处理机制的介绍,想学IT技术的小伙伴可以来看看的,下面小编就跟大家分享以下这一部分的内容,小编觉得很有用的,大家快来学习把
1、函数原型:
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
2、函数名前面的w说明是宽字符,当然存在宽字符那就会有与之对应的窄字符版本,
3、窄字符版本下唯一不同的是第三个参数,没有W。
4、APIENTRY(一种调用约定):
4.1、#define APIENTRY WINAPI
4.2、#define WINAPI __stdcall
4.3、__stdcall:实际上是一种调用约定
4.4、调用约定:
4.4.1、在函数中将调用约定去掉也是可以正常的运行这个函数的,因为已经存在默认。
4.4.1、那么调用约定有什么作用呢:
4.4.1.1、首先我们进行函数参数传递的时候都是通过栈进行的参数的传递。
4.4.1.2、当函数结束的时候栈帧将会被清理(平栈)。
4.4.1.3、__stdcall:指的是调用方进行清理。
4.4.1.4、__cdecl:由被调用方进行清理。
4.4.1.5、__fastcall:指的是不通过栈进行参数的传递,而是通过寄存器来进行参数的传递。
4.4.1.6、在C编译中使用的都是__cdecl,而在win32中全部用的都是__stdcall。
5、HINSTANCE:和之前讲的HANDLE是一样的,同样是来表示一个内核对象、但是这个我们称之为一个实例对象。
6、达内培训小编可以像操作HANDLE一样来进行HINSTANCE对进程进行操作。
7、实例对象:指的是一个进程,
8、第一个参数hInstance是当前实例的实例句柄。
9、第二个参数hPrevInstance是父进程的实例句柄。
10、为什么需要由外部传递当前的实例句柄呢?
10.1、其实我们写的程序之所以能成为一个进程:是因为有操作系统的存在。
10.2、其实呢,winMain是一个被动调用的程序,而本身是不能自己进行进程的创建的,必须要由操作系统来进行进程的创建。
10.3、既然是由操作系统来创建这个进程的,所以本身程序是不知道这个进程编号的。
更多winMain函数消息处理机制方面的知识,请登陆达内IT培训学校!(http://km.tedu.cn)