博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
extern “C” _cdecl __stdcall
阅读量:5207 次
发布时间:2019-06-14

本文共 768 字,大约阅读时间需要 2 分钟。

关于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

你可能感兴趣的文章
ETL
查看>>
Tomcat源码分析(六)--日志记录器和国际化
查看>>
今天把csdn的博客搬家到博客园
查看>>
D3.js+Es6+webpack构建人物关系图(力导向图),动态更新数据,点击增加节点,拖拽增加连线......
查看>>
基于网络的 Red Hat 无人值守安装
查看>>
Mybatis第六篇【配置文件和映射文件再解读、占位符、主键生成与获取、Mapper代理】...
查看>>
MySQL学习笔记(二):MySQL数据类型汇总及选择参考
查看>>
jQ 移动端返回顶部代码整理
查看>>
博客园界面美化
查看>>
sql查询远程数据库的表的数据并填充到本地数据库的表
查看>>
YII缓存依赖的应用
查看>>
决策树在机器学习的理论学习与实践
查看>>
Biee 11g权限详解
查看>>
minggw 安装
查看>>
Jquery操作cookie,实现简单的记住用户名的操作
查看>>
[BZOJ1196][HNOI2006]公路修建问题 二分答案+最小生成树
查看>>
PHP基础入门(二)
查看>>
[Luogu P3119] [USACO15JAN]草鉴定Grass Cownoisseur (缩点+图上DP)
查看>>
【原创】大数据基础之Zookeeper(4)应用场景
查看>>
18款在线代码片段测试工具
查看>>