_stdcall和_cdecl,extern “C”的联系
2016-12-13 19:28
134 查看
_stdcall 和_cdecl的区别
前者是函数自己清理堆栈,右到左入栈,例如:win API函数和回调函数(必须)。后者是调用方清理堆栈,右道左入栈,是c语言默认的调用方式,也是VC的默认方式。
Extern “C”是C++兼容C语言代码设计的关键字,为了兼容既存的大量c代码。表示这段代码用c语言的方式编译,因为C++编译器是兼容c代码的,所以这个设置可用。c语言函数的可变参函数必须是_cdecl 方式。
这样的话,Extern “C” + 默认的_cdecl ,编译的dll导出函数就是不加修饰的函数名。
如果 Extern “C”+_stdcall ,这就是说函数要自己清理堆栈,所以导出的函数名是 _functionname@number形式的,新的编译器已经不带开头下划线了。
number是参数的大小,Cpu清理堆栈用的。
不加Extern “C”的话就是C++编译器编译,函数名的修饰是?functionname@@HI@Z这样的比较复杂,里面有关参数返回值的信息。
相关文章推荐
- _stdcall,_cdecl与extern "C"
- 调用约定(__stdcall and __cdecl)和修饰名(extern c)
- _cdecl 与 _stdcall 和 extern 与 extern "C" 解释与理解
- cdecl、stdcall、fastcall、declspec 、extern "c"
- cdecl和stdcall等函数调用约定(function call convention)的区别与联系
- extern “C” _cdecl __stdcall
- 编写和使用DLL时,常用的关键字 extern "C",__declspec,__cdecl,__stdcall
- _stdcall与_cdecl的区别与联系
- __stdcall,__cdecl,_cdecl,_stdcall,__fastcall,_fastcall 区别简介 和 extern "C" 的作用
- _stdcall,_cdecl,_fastcall区别与联系
- C/C++中函数的调用约定(__cdecl, __stdcall)以及extern, extern “C"的详细解释
- _stdcall,_cdecl与extern "C"
- stdcall,cdecl,fastcall区别与联系
- 总结&备忘:__stdcall,__cdecl,extern "C"
- __cdecl, __stdcall, __fastcall
- __cdecl __fastcall与 __stdcall
- 函数调用的几个概念:_stdcall,_cdecl....
- WINAPI宏、__cdecl、__stdcall、__fastcall
- _cdecl 和_stdcall两种函数调用方式的区别
- 调用方式 __cdecl _stdcall _fastcall _thiscall