概述
C++学习笔记————WINAPI宏定义
在学习时,发现有一个代码实例中的方法函数定义如下:
DWORD WINAPI Fun(LPVOID lpParamter)
{
for (int i = 0; i < 10; i++)
cout << "A Thread Fun Display!" << endl;
return 0L;
}
DWORD之前在OCX控件中接触过了,是windows环境中定义的数据类型,本质就是 unsigned int 型,但是后面的WINAPI之前并没有接触过,所以决定稍稍了解一下。
其实WINAPI是C语言中的一种调用方式,WINAPI是一个宏,所代表的符号是__stdcall, 函数名前加上这个符号表示这个函数的调用约定是标准调用约定,windows API函数采用这种调用约定。
具体的C语言各种调用方式详解我找到了一位大佬的总结,很厉害:
C调用方式总结
总体来说,stdcall的调用约定意味着:
1)参数从右向左压入堆栈;
2)函数自身修改堆栈;
3)函数名自动加前导的下划线,后面紧跟一个@符号,其后紧跟着参数的尺寸。
对于参数从右向左压入堆栈,我疑惑压栈的顺序是从右往左还是从左往右有何区别,经过查找资料,我找到了一个解释:
标准C参数压栈次序是反向压栈,也就是从右到左。因为C要把不定参数…放在最右边,为了高效率定位参数,所以只能从右到左压栈,这样第一个参数最靠近栈顶。
比如printf (const char * szFormat,…);如果从左到右压不容易找到第一个参数szFormat
不过16位操作系统的时候,调用API函数时,微软的vc曾经支持过一种从左到右的压占次序,现在32位系统没有了。
对于什么时候使用WINAPI宏定义,我暂时只知道:
1.在程序中需要调用WindowsAPI的方法时,有些方法的接口声明和定义会用到WINAPI宏。
2.在编写Windows应用程序时(如C编写windows窗口程序),其中调用的函数声明和定义时需要加上WINAPI宏。
3.在进行C++thread多线程编程时线程调用的程序必须以下列形式声明:
DWORD WINAPI 函数名 (LPVOID lpParam) ,格式不正确将无法调用成功。
最后
以上就是俊秀丝袜为你收集整理的2020.4.15C++学习笔记————WINAPI宏定义的全部内容,希望文章能够帮你解决2020.4.15C++学习笔记————WINAPI宏定义所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复