一直搞不懂为什么在函数前面加上WINAPI、CALLBACK等是什么意思又不是返回值为什么加在前面今天终于知道了这是一个呼叫声明(姑且称之吧)

在VC++ 6.0中,WINDEF.h

#define WINAPI       CDECL             //=_cdecl

#define CALLBACK     PASCAL     //=_pascal,VC已经不支持直接使用_pascal了

顺便提下CALLBACK:

在BCB(Boland C++Builder )中:windef.h

#define WINAPI      __stdcall

#define CALLBACK     __stdcall

具体来说,他们是关于堆栈的一些说明,首先是函数参数压栈顺序,其次是压入堆栈的内容由谁来清除,调用者还是函数自己?

简单说明:

__cdecl是C/C++和MFC程序默认使用的调用约定,也可以在函数声明时加上__cdecl关键字来手工指定。采用__cdecl约定时,函数参数按照从右到左的顺序入栈,并且由调用函数者把参数弹出栈以清理堆栈。因此,实现可变参数的函数只能使用该调用约定。由于每一个使用__cdecl约定的函数都要包含清理堆栈的代码,所以产生的可执行文件大小会比较大。__cdecl可以写成_cdecl。
__stdcall调用约定用于调用Win32 API函数。采用__stdcal约定时,函数参数按照从右到左的顺序入栈,被调用的函数在返回前清理传送参数的栈,函数参数个数固定。由于函数体本身知道传进来的参数个数,因此被调用的函数可以在返回前用一条ret n指令直接清理传递参数的堆栈。__stdcall可以写成_stdcall。
__fastcall约定用于对性能要求非常高的场合。__fastcall约定将函数的从左边开始的两个大小不大于4个字节(DWORD)的参数分别放在ECX和EDX寄存器,其余的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的堆栈。__fastcall可以写成_fastcall。

特别说明:
1. 在默认情况下,采用__cdecl方式,因此可以省略.
2. WINAPI一般用于修饰动态链接库中导出函数
3. CALLBACK仅用于修饰回调函数
4. VC下和BCB下对WINAPI的定义不同,所以不能直接从BCB下调用VC的dll的一个原因了。

看来 WINAPI 与 DLL 关系很密切,所以还应该探讨一下 DLL 啊。

在函数前面加上WINAPI、CALLBACK等是什么意思相关推荐

  1. 成员函数后面加上const的作用

    const表示成员函数不会修改类中的数据成员. 规则: 在类中被const 声明的函数只能访问const 函数,而非const 函数可以访问任意成员函数. 在成员函数中不管数据是否具有const 属性 ...

  2. C/C++/动态链接库DLL中函数的调用约定与名称修饰

    参见:http://blog.twofei.com/cc/impl/calling-convension.html 调用约定(Calling Convention)是指在程序设计语言中为了实现函数调用 ...

  3. C++回调函数(callback)的使用

    什么是回调函数(callback)      模块A有一个函数foo,它向模块B传递foo的地址,然后在B里面发生某种事件(event)时,通过从A里面传递过来的foo的地址调用foo,通知A发生了什 ...

  4. Callback 函数

    说明:此文章出自<深入浅出mfc>第6章的"Callback  函数" Callback 函数 Hello的OnPaint在程序收到 WM_PAINT之后开始运作.为了 ...

  5. linux callback函数,C++回调函数(callback)的使用

    什么是回调函数(callback) 模块A有一个函数foo,它向模块B传递foo的地址,然后在B里面发生某种事件(event)时,通过从A里面传递过来的foo的地址调用foo,通知A发生了什么事情,让 ...

  6. C++中回调函数(CALLBACK)初探

    C++中回调函数(CALLBACK)初探 简介 对于很多初学者来说,往往觉得回调函数很神秘,很想知道回调函数的工作原理.本文将要解释什么是回调函数.它们有什么好处.为什么要使用它们等等问题,在开始之前 ...

  7. windows CALLBACK函数

    凡是由你设计却由windows系统呼叫的函数,统称为callback函数.某些API函数要求以callback作为你参数之一.如SetTimer,LineDDA,EnumObjects.用某个函数(通 ...

  8. CALLBACK 函数

    CALLBACK 函数           转自http://www.cnblogs.com/gunboat/archive/2007/04/13/711864.html CALLBACK == WI ...

  9. 【转】Windows CALLBACK 函数

    凡是由你设计却由windows系统呼叫的函数,统称为callback函数.某些API函数要求以callback作为你参数之一.如SetTimer,LineDDA,EnumObjects.用某个函数(通 ...

最新文章

  1. 麻省理工学院的新系统TextFooler, 可以欺骗Google的自然语言处理系统及Google Home的音频...
  2. GPT-3数学不及格,愁坏伯克利团队,于是他们出了12500道数学作业
  3. Ubuntu 16.04禁用来宾账号(Guest User)
  4. 胜任素质--哈佛大学教授麦克里兰 (McClelland)有效地预测外交官实际工作业绩的人员选拔方法...
  5. python3 异步 semaphore 信号量 控制并发
  6. JPA和Hibernate级联类型的初学者指南
  7. 数据库笔记10:创建与管理视图
  8. egg 编码规范_从 Egg.js 到 NestJS,爱码客后端选型之路
  9. 手机窃取PC信息,APT基础。
  10. C# 判断字符中是否包含中文
  11. 挑选32 2K显示器
  12. node中exports和module.exports的关系及使用
  13. OpenCV-人脸识别
  14. mysql毫秒丢失_MySQL JDBC 更新数据丢失毫秒精度
  15. 常用GIS(高清卫星影像、DEM)数据下载
  16. 电脑D盘格式化了怎么恢复
  17. 小程序api(常用)
  18. 关于生产环境跨域问题
  19. java基础思维导图(java基础部分)
  20. 数学奥赛狂砍10题!Meta发布全新定理证明器:AI即将接管数学?

热门文章

  1. Rabbitmq 安全账号管理方案
  2. zabbix启动失败的排查记录
  3. 中文版-Plan9汇编器手册-A Manual for the Plan 9 assembler
  4. ArcGIS基础:合并表格(追加、合并工具)
  5. PMP证书现在还值得考吗?
  6. Matlab基本函数-feather函数
  7. Wangle源码分析:ClientBootstrap
  8. WIFI 认证 测试
  9. 什么是git 暂存区
  10. 支付宝微信的数字经营项目是风口还是割韭菜(带项目评测)