stdcall

转载 2007年09月22日 10:06:00

读者可能会注意到上面的_stdcall这个词,它实际上是 Microsoft 。对

编译器的一个扩展,任何一个支持开发下win32应用程序的编译器都会有此

或与此等价的选项。例如. Borland ,watcom  的编译器均有些选项。用

_stacall标记的函数将使用标准的调用约定,即这些函数将在返回到调用

者之前将参数从栈中删除,Pascal函数对于栈的处理使用的也是同一种方

式.在常规的C/C++调用约定中,栈的清理工作则是由调用者完成的.大多数

其它的编程语言,如Visual Basic缺省情况下使用的也是标准的调用约定,

标准调用约定名称的由来在于所有的win32 api函数,除了那些带有变参的

外,使用的都是这种调用方式,带有变参的函数所用的仍然是C调用约定,即

_cdecl,windows采用标准的调用 约定的原因在于这种约定可以减少代码

的大小 ,另外还有一个原因是早期的Windows运行于640KB 的系统上的。

Microsoft平台上 CoM 接日所提供的所有函数使用的均是标准的调用约定

。参数数目可变的通数便用的则是 c 调用约定。一般人们希望接口的实

现使用这些约定,但要说明的是这并不是com的绝对需要,开发人员可以选

择使用另外的某些调用约定. 

相关文章推荐

stdcall详解教程

  • 2016年10月27日 15:10
  • 50KB
  • 下载

stdcall与cdecl的区别-16.09.20

  • 2016年09月20日 22:49
  • 70KB
  • 下载

#define WINAPI __stdcall是什么意思(转)

http://www.cppblog.com/Lee/archive/2008/12/09/68966.html 调用约定(Calling   convention):决定函数参数传送时入栈...

cdecl和stdcall等函数调用约定(function call convention)的区别与联系

我们知道,函数调用是靠栈来实现的,编译器帮助我们做了压栈和恢复堆栈工作,使我们在调用任一个函数时,都不用进行压栈和恢复堆栈工作。而又由于实现的方式很多,那我们怎么告诉编译器按照哪种方式呢? ...

__stdcall,__cdcel,extern c 和导出函数名

无论c或c++都会对导出函数改名或不改名,无论你是静态还是动态调用一个导出函数,都可能碰上改名后导致的调用失败(甚至可能是调用约定不同而导致清理堆栈出错,造成崩溃),下面分析一下改名和调用约定之间的关...

函数调用的区别:_cdecl以及_stdcall

一、概念 1)_stdcall调用    _stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,被调函数自身在返回前清空堆栈。    WIN32 Api都采用_stdca...

__cdecl __fastcall与 __stdcall(转)

  Visual C++ Compiler Options可以指定的Calling Convention有 3种: /Gd /Gr /Gz 这三个参数决定了: 1.函数参数以...

C/C++ 函数调用约定(__cdecl、__stdcall、__fastcall)

调用函数时,计算机常用栈来存放函数执行需要的参数,由于栈的空间大小是有限的,在windows下,栈是向低地址扩展的数据结构,是一块连续的内存区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好...

何时使用WINAPI,CALLBACK 以及_stdcall _cdecl _pascal 等的用法区别总结

#define   CALLBACK         __stdcall  #define   WINAPI             __stdcall  #define   WINAPIV ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:stdcall
举报原因:
原因补充:

(最多只允许输入30个字)