在学习时,发现有一个代码实例中的方法函数定义如下:

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++ 小知识点WINAPI

总体来说,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) ,格式不正确将无法调用成功。

C++学习笔记————WINAPI宏定义相关推荐

  1. mysql分页概念_MySQL学习笔记之数据定义表约束,分页方法总结

    本文实例讲述了MySQL学习笔记之数据定义表约束,分页方法.分享给大家供大家参考,具体如下: 1. primary key 主键 特点:主键是用于唯一标识一条记录的约束,一张表最多只能有一个主键,不能 ...

  2. Reac学习笔记#01#组件定义以及props、state的管理

    React学习#01 组件的定义和 state 以及props的使用 官方文档 1. 特点 数据单项绑定,自上而下流动 支持组件封装和组件间的引用组合 JSX/TSX语法的使用 使用虚拟DOM操作(d ...

  3. C语言学习记录:宏定义:#define

    C预处理器:在程序执行之前查看程序.根据程序中的预处理器指令,预处理器把符号缩写替换成其表示的内容. 预处理指令示例: #define.#include.#ifdef.#else.#endif.#if ...

  4. Python学习笔记 - 探索函数定义和使用

    大家好,我是Mr数据杨,你们有没有读过<三国演义>呢?没错,将以这个经典的古代战争史诗为引,来探索Python的诸多神奇之处. 首先来说说函数的重要性.诸葛亮一生献出了不少锦囊妙计,这些计 ...

  5. SVM学习笔记1-问题定义

    问题定义: 给出一些样本,包含两类.svm试图找到一个超平面,将数据分开,并且每种样本到超平面的距离的最小值最大. 输入样本:$\{x_{i},y_{i}| 1\leq i\leq n \}$,$y_ ...

  6. Kotlin学习笔记-----函数的定义

    函数定义 kotlin的函数其实就是java中的方法, 名字不一样, 定义方式和java中也类似, 函数名(方法名), 参数, 返回值 区别在于, kotlin的函数定义需要加上fun, 这里和jav ...

  7. 十七、PHP框架Laravel学习笔记——模型的定义

    一.默认设置 框架可以使用 Eloquent ORM 进行数据库交互,也就是关系对象模型: 在数据库入门阶段,我们已经创建了一个 User.php 模型,如下: php artisan make:mo ...

  8. 二、PHP框架Laravel学习笔记——路由的定义和控制器

    一.路由的定义 什么是路由?路由就是提供接受 HTTP 请求的路径,并和程序交互的功能: 简单点理解,就是为了提供访问程序的 URL 地址,所做的一些设置工作: phpstorm 支持 cmd 操作, ...

  9. Struts2学习笔记 - Action篇定义逻辑Action

    有三种方法可以使一个Action处理多个请求 动态方法调用DMI 定义逻辑Acton 在配置文件中使用通配符 这文章就谈论一下定义逻辑Action 这里主要关注的是struts.xml配置文件,一般情 ...

最新文章

  1. 通知 | “大数据能力提升项目”证书办理及领取(2021年秋季学期)
  2. php 百度收录api_php使用百度翻译api示例分享
  3. java sftp mget_总结三种Shell脚本编程中避免SFTP输入密码的方法
  4. windows mysql 备份_Windows下MySQL数据库备份脚本(二) | 系统运维
  5. C语言数字3转变字符 3 程序,C语言重点知识点
  6. 小米线刷工具 MiFlash 提示长度不能小于 0 参数名 length,无法读取设备解决方法
  7. 怎样制作网吧服务器,网吧无盘系统怎么做之装置服务器系统
  8. 学计算机推荐电脑,计算机专业笔记本电脑推荐
  9. SSM小项目(会议管理系统)二整合mybatis(图解超详细)
  10. ElasticSearch分布式搜索引擎安装教程
  11. VBA中汉字转成拼音
  12. 如何用python计算excel两行之间的差值_excel表格求两列数据差值-怎样在EXCEL表格中求两列数的差?...
  13. java memorycache原理_CPU Cache 原理及操作
  14. 智能聊天机器人之图灵机器人
  15. firefox(火狐浏览器)插件的应用
  16. js中的内存溢出和内存泄漏
  17. Android网络编程基础(第一弹)
  18. pga_aggregate_limit
  19. 实时WebRTC网页播放器进入快速功能迭代
  20. 基于localStorge开发登录模块的记住密码与自动登录

热门文章

  1. 【博客大赛】100行js代码实现网站在线用户数量统计 nodejs + socket.io方案
  2. Spring核心初探~
  3. Linux中用户与组群管理
  4. ubuntu下使用yocto制作龙芯文件系统
  5. HBase——集群搭建
  6. 毕设日志5.12凌晨
  7. docker必须要sudo,但是sudo的话,又获得不了环境变量怎么办?
  8. Webpack入门教程二
  9. 使用OVF部署虚拟机
  10. Jenkins+maven(testng)项目(本地项目配置)