• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

extern“C”_cdecl__stdcall

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

关于C++动态库导出API相关的这几个关键字,一直困扰了许久,每次在调用C++动态库接口函数的时候,我都不得不花一些时间去“试”。但是用过之后就忘了……

首先解释一下 _cdecl 和 __stdcall所代表的意义:

Cdecl:调用方清理堆栈。这使您能够调用具有 varargs 的函数(如 Printf),使之可用于接受可变数目的参数的方法;

StdCall:被调用方清理堆栈。这是使用平台 invoke 调用非托管函数的默认约定。

我花了一些时间专门对以上这个关键字做了一些测试。结果如下(没有使用def文件):

API函数声明:

__declspec(dllexport) void MyMethod();

导出符号:

?MyMethod@@YAXXZ

API函数声明:

extern "C" __declspec(dllexport) void MyMethod();

导出符号:

MyMethod

API函数声明:

__declspec(dllexport) void __stdcall MyMethod();

导出符号:

?MyMethod@@YGXXZ

API函数声明:(这种情况比较特殊)

extern "C" __declspec(dllexport) void __stdcall MyMethod();

导出符号:

_MyMethod@0

 

API函数声明:

__declspec(dllexport) void _cdecl MyMethod()

导出符号:

?MyMethod@@YAXXZ

API函数声明:

extern "C" __declspec(dllexport) void _cdecl MyMethod();

导出符号:

MyMethod

通过以上很容易知道该如何使用API函数声明了。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
c#创建access数据库和数据表发布时间:2022-07-14
下一篇:
oracle12c之三控制PDB中CPU资源使用发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap