参考:http://www.cnblogs.com/dragon2012/p/3884597.html

1. _stdcall(Pascal调用):参数采用从右到左的压栈方式,由调用者完成压栈操作,被调函数自身在返回前清空堆栈。

WIN32 Api都采用这种调用方式,有如下宏定义:  #define WINAPI _stdcall

2._cdecl(C调用):是C/C++的缺省调用方式,参数采用从右到左的压栈方式,由调用者完成压栈操作 ,传送参数的内存栈由调用者维护。_cedcl约定的函数只能被C/C++调用,每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。

3.区别
     几乎我们写的每一个WINDOWS API函数都是__stdcall类型的,首先,需要了解两者之间的区别: WINDOWS的函数调用时需要用到栈(STACK,一种先入后出的存储结构)。当函数调用完成后,栈需要清除,这里就是问题的关键,如何清除?如果我 们的函数使用了_cdecl,那么栈的清除工作是由调用者,用COM的术语来讲就是客户来完成的。这样带来了一个棘手的问题,不同的编译器产生栈的方式不 尽相同,那么调用者能否正常的完成清除工作呢?答案是不能。如果使用__stdcall,上面的问题就解决了,函数自己解决清除工作。所以,在跨(开发) 平台的调用中,我们都使用__stdcall(虽然有时是以WINAPI的样子出现)。那么为什么还需要_cdecl呢?当我们遇到这样的函数如 fprintf()它的参数是可变的,不定长的,被调用者事先无法知道参数的长度,事后的清除工作也无法正常的进行,因此,这种情况我们只能使用 _cdecl。到这里我们有一个结论,如果你的程序中没有涉及可变参数,最好使用__stdcall关键字。

Pascal调用与C调用相关推荐

  1. 直观讲解一下 RPC 调用和 HTTP 调用的区别!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:浮生忆梦 blog.csdn.net/m0_3811 ...

  2. 直观讲解一下RPC调用和HTTP调用的区别

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:浮生忆梦 blog.csdn.net/m0_38110132 ...

  3. 把接口调用打成jar包的类怎么写_直观讲解RPC调用和HTTP调用的区别

    来源 :浮生忆梦 很长时间以来都没有怎么好好搞清楚RPC(即Remote Procedure Call,远程过程调用)和HTTP调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~N ...

  4. oracle创建函数和调用存储过程和调用函数的例子(区别)

    创建函数: 格式:create or replace function func(参数 参数类型) Return number Is Begin --------业务逻辑--------- End; ...

  5. C++对象模型3——vptr的位置、手动调用虚函数、从汇编代码看普通调用和多态调用

    一.vptr的位置 class test { public:int i; virtual void testfunc() {} };int main() {test a;char* p1 = rein ...

  6. zblog如何调用HTML,Zblog调用栏目文章的方法

    很多的网站在php空间建站和运营的时候都会要调用到某个栏目里的文章,关于调用栏目里的文章这一类的教程,无忧主机小编也已经介绍过很多种类的程序和方法,但是还没有介绍过zblog这款程序的调用栏目文章的方 ...

  7. oracle创建包 和调用,oracle创建函数和调用存储过程和调用函数的例子(区别)...

    创建函数: 格式:create or replace function func(参数 参数类型) Return number Is Begin --------业务逻辑--------- End; ...

  8. 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序

    构造函数.拷贝构造函数和析构函数的的调用时刻及调用顺序 对象是由"底层向上"开始构造的,当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达 ...

  9. 软件c#语言调用摄像头,C#调用摄像头的几种方式

    C#调用摄像头的方式 本文将讲诉在C#的winform程序中如何调用摄像头: 1.调用USB摄像头 2.调用普通IP摄像头 3.通过摄像头SDK进行调用 使用的DLL 首先给上我所使用的DLL 调用U ...

  10. RPC调用和HTTP调用的区别你知道吗

    前言 很长时间以来都没有怎么好好搞清楚RPC(即Remote Procedure Call,远程过程调用)和HTTP调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~Naive! ...

最新文章

  1. linux下获取系统时间 和 时间偏移
  2. ESXI中VM迁移或OVF模板导入linux系统常规操作
  3. php万能注入密码,php下的SQL注入万能用户名和密码
  4. activiti bpmn 安装不上_小猿圈之Eclipse安装Activiti插件(流程设计器)
  5. vue 部门tree样式_vue+Element实现tree树形数据展示
  6. html5语言基础教程,HTML5基础教程,从入门到精通,零基础学HTML5
  7. linux下pcre编译,linux下交叉编译lighttpd以及pcre
  8. caffe的运行create_data.sh前对VOC2007图片格式的更改
  9. 史上最强春节档来袭!Python 解读哪部影片值得一看?
  10. C++ 整型所能表示的数据范围
  11. Python学习--识别“字符串字典列表元组“
  12. android opencl sdk,在新的Android Studio中使用OpenCL
  13. Tcl 语言——过程与字符串匹配篇
  14. 计算机二级试题操作题图文讲解,计算机二级Word篇-实操真题详解26
  15. 10、一篇经典的域渗透文章
  16. Cell:PopCOGenT鉴定微生物基因组间的基因流动
  17. 网络逻辑漏洞、SQLMAP、Nmap及其它命令的使用方法
  18. 查询失败,后台服务器运行错误,添加网络打印机错误?怎么处理?Windows 无法连接到打印机。 服务器打印后台处理程序服务没有运行。...
  19. 爷回青——小米5s Plus刷入LineageOS
  20. AI+MR遇冷后回暖,国内公司抢先卡位仍有风险待解

热门文章

  1. Android机顶盒网络地址端口连通性测试
  2. ap音频测试仪软件,AP APX-525音频分析仪
  3. Linux 信号量及其操作函数
  4. while(pid1 = fork()== -1);直接分号,循环语句为空
  5. 设置共享打印机连接提示0x000000bcb错误问题的修复办法
  6. Podfile.lock
  7. DXF格式文件导入AD,做成可加工的PCB文件
  8. idea实现远程调试
  9. 以下数据库收录外文文献全文的有_除了SCIHUB,这十大外文文献下载数据库也应该一试!...
  10. MacOS怎么设置动态桌面,heic动态桌面壁纸怎么用