C++创建动态库的方法

1.简要介绍

a.在函数名和返回值之间存在调用约定,调用约定用来协商传参的方式,内容如图:在这里插入图片描述
b.从微软官方文档可以看到,导出函数务必遵守__sytdcall约定:在这里插入图片描述
c.dll导出方式有以下两种:在这里插入图片描述

2.创建DLL工程

a.打开vs工程新建“具有导出向的动态链接库”,默认工程微软给了示例,包含导出类、函数和变量,保留自己用到的,此处导出一个Add函数出来。

头文件中:

#ifdef DLLEXPORT_EXPORTS
#define DLLEXPORT_API __declspec(dllexport)
#else
#define DLLEXPORT_API __declspec(dllimport)
#endif
DLLEXPORT_API int Add(int a, int b);

cpp文件中:

DLLEXPORT_API int Add(int a, int b)
{
    return a + b;
}

编译后则会在Debug目录生成dll和lib文件。
再新建一个控制台应用工程,只需包含上述DLL的头文件和lib文件目录即可在工程里调用Add函数。

如果C++导出的dll工程给C语言使用,那么在导出的时候需添加宏定义,因为两种语言对函数的解释方法不同。

#ifdef __cplusplus
extern "C"
{
#endif
DLLEXPORT_API int Add(int a, int b)
#ifdef _cplusplus
}
#endif

b.def的方式导出函数,优点是导出的函数名比较清楚,不需要在函数的声明和定义前增加DLLEXPORT_API。
操作方法:
①选中项目右击添加新建项,代码->模块定义文件.def,在源文件中会增加.def文件,在def文件中修改如下,EXPORTS后面增加导出的函数名。
def文件

LIBRARY DLLExport
EXPORTS
 Add

头文件

int Add(int a, int b);

cpp文件

int Add(int a, int b)
{
    return a + b;
}

此时再次重新编译后,运行控制台工程同样能够执行。
备注:如果想取消使用def文件,右击项目打开属性,在链接器->输入->模块定义文件中,删除def文件即可。

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值