您的位置:首页 > 其它

__stdcalll——调用约定说明符

2014-07-04 09:55 134 查看
函数调用过程中,主调函数和被调函数之间需要使用堆栈作为中间缓冲来传递参数,为保证参数传递顺序的正确性,必须对参数的入栈出栈顺序进行约定,常用的有__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的别名。




参考资料

《MFC Windows应用程序设计(第3版)》p14
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: