我是靠谱客的博主 俊秀丝袜,最近开发中收集的这篇文章主要介绍2020.4.15C++学习笔记————WINAPI宏定义,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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宏定义所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部