当前位置:首页 > 资讯 > info5 > 正文

__stdcalll——调用约定说明符

发表于: 2014-07-04   作者:Q1302182594   来源:转载   浏览:
摘要:   函数调用过程中,主调函数和被调函数之间需要使用堆栈作为中间缓冲来传递参数,为保证参数传递顺序的正确性,必须对参数的入栈出栈顺序进行约定,常用的有__stdcall和__cdecl。在定义一个函数时,应该在函数名之前,返回类型之后使用调用约定说明符对这个函数所采用的调用约定进行说明。  不同开发环境的编译器都有自己的默认调用约定,如VisualC++默认的函数调用约定为__cdecl,所以调用定

    函数调用过程中,主调函数和被调函数之间需要使用堆栈作为中间缓冲来传递参数,为保证参数传递顺序的正确性,必须对参数的入栈出栈顺序进行约定,常用的有__stdcall__cdecl。在定义一个函数时,应该在函数名之前,返回类型之后使用调用约定说明符对这个函数所采用的调用约定进行说明。

    不同开发环境的编译器都有自己的默认调用约定,如Visual C++默认的函数调用约定为__cdecl,所以调用定义为__cdecl的库函数时,可以不做任何说明。然而,Win32 API函数都遵循__stdcall调用约定,因此在默认函数调用约定为__cdecl的Visual C++开发环境中,调用Win32 AP函数必须在函数名前显式地加上__stdcall。

   在Windows中,很喜欢定义别名,__stdcall被定义了许多的别名:

#define WINAPI __stdcall

#define CALLBACK __stdcall

#define CV_STDCALL __stdcall // OpenCV1.0源码中的定义

   下面是OpenCV1.0源码中一个函数的定义,使用了CV_STDCALL调用约定,其中CV_STDCALL是__stdcall的别名。

 __stdcalll——调用约定说明符_第1张图片

参考资料

《MFC Windows应用程序设计(第3版)》p14

__stdcalll——调用约定说明符

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
函数调用约定和堆栈 1 什么是堆栈 编译器一般使用堆栈实现函数调用。堆栈是存储器的一个区域,嵌入
函数调用约定和堆栈 1 什么是堆栈 编译器一般使用堆栈实现函数调用。堆栈是存储器的一个区域,嵌入
1 什么是堆栈 编译器一般使用堆栈实现函数调用。堆栈是存储器的一个区域,嵌入式环境有时需要程序员
1 什么是堆栈 编译器一般使用堆栈实现函数调用。堆栈是存储器的一个区域,嵌入式环境有时需要程序员
我们经常会讨论这样的问题:什么时候数据存储在堆栈(Stack)中,什么时候数据存储在堆(Heap)中。我们
http://zh.wikipedia.org/wiki/X86%E8%B0%83%E7%94%A8%E7%BA%A6%E5%AE%9A 这里描述了在x86芯片架构
int bar( int a, int b, int c, int d, int e, int f, int g ) { int array2[ 7 ]; array2[ 0 ] = a
  _cdecl 是C Declaration的缩写,表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些
在Windows编程中,我们经常看到如int WINAPI _tWinMain(HINSTANCE hInstanceExe, PSTR pszCmdLine,
用BlueprintImplementableEvent标明的函数在C++代码中不需要用方法体,方法体在蓝图中实现。 用法:
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号