关于C++动态库导出API相关的这几个关键字,一直困扰了许久,每次在调用C++动态库接口函数的时候,我都不得不花一些时间去“试”。但是用过之后就忘了……
首先解释一下 _cdecl 和 __stdcall所代表的意义:
Cdecl:调用方清理堆栈。这使您能够调用具有 varargs 的函数(如 Printf),使之可用于接受可变数目的参数的方法;
StdCall:被调用方清理堆栈。这是使用平台 invoke 调用非托管函数的默认约定。
我花了一些时间专门对以上这个关键字做了一些测试。结果如下(没有使用def文件):
API函数声明:
__declspec(dllexport) void MyMethod();
导出符号:
API函数声明:
extern "C" __declspec(dllexport) void MyMethod();
导出符号:
MyMethod
API函数声明:
__declspec(dllexport) void __stdcall MyMethod();
导出符号:
API函数声明:(这种情况比较特殊)
extern "C" __declspec(dllexport) void __stdcall MyMethod();
导出符号:
API函数声明:
__declspec(dllexport) void _cdecl MyMethod()
导出符号:
API函数声明:
extern "C" __declspec(dllexport) void _cdecl MyMethod();
导出符号:
MyMethod
通过以上很容易知道该如何使用API函数声明了。
原文链接: https://www.cnblogs.com/quark/archive/2011/06/29/2093527.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/27857
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!