在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
关于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函数声明了。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论