300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > VS-C++创建和调用DLL动态链接库(傻瓜式教程)

VS-C++创建和调用DLL动态链接库(傻瓜式教程)

时间:2019-05-15 12:42:12

相关推荐

VS-C++创建和调用DLL动态链接库(傻瓜式教程)

前言:查了好久好久网上的资料C++调用动态链接库,试了好多方法(直接创建DLL、空项目创建的)都多多少少有些问题,最后自己不断摸索着成功了,还是很开心的,接下来把最清晰的步骤分享给大家(C++新人,有什么说的不清楚的还请大佬们见谅)

第一步:创建C++空项目

第二步:创建头文件(.h)以及源文件(.cpp)

第三步:编写头文件(重点)

图片显示部分是模板,名称可以自己起最重要的就是__declspec(dllexport)以及__declspec(dllimport)。一个是导出,一个是导入。

为像我一样懒人们提供代码粘贴

#pragma once#ifndef BHDLL_d#define BHDLL_d//宏定义导出#ifdef BHDLL__//如果没有定义DLLH 就定义 DLLH __declspec(dllexport)#define BHDLL __declspec(dllexport)//导出#else#define BHDLL __declspec(dllimport)//导入#endif // DLLH__//如果没有定义DLLH 就定义 DLLH //编写代码区域//导出函数BHDLL int add(int a, int b);BHDLL int sub(int a, int b);//导出类class BHDLL dllH{public:int mul(int a, int b);int div(int a, int b);};//以C语言方式导出函数:extern "C"{BHDLL int Cadd(int a, int b);BHDLL int Csub(int a, int b);}#endif

第四步:源文件实现头文件里面的方法

为像我一样懒人们提供代码粘贴

#include "BH_dll.h"#include <iostream>using namespace std;int add(int a, int b){return a + b;}int sub(int a, int b){return a - b;}int dllH::mul(int a, int b){return a * b;}int dllH::div(int a, int b){return a / b;}int Cadd(int a, int b){return a + b;}int Csub(int a, int b){return a - b;}

第五步:配置解决平台X86/X64都可以,但是这个导出的DLL,用户引用的时候尽量和导出时的DLL平台一致

第六步:配置类型-属性

把配置类型变成动态库-应用-确定-生成解决方案。

第七步:完成动态链接库创建

在项目文件中可以找到dll,lib,,h文件,我们要的就是这三个

第八步:创建新项目引用动态链接库

添加main函数

第九步:引用DLL

在项目文件下创建两个文件夹,后续往里添加三个文件

在include文件中添加刚才BH_DLL文件生成的.h文件

在lib文件中添加刚才BH_DLL文件生成的dll和lib文件

在项目文件夹下再次添加刚才BH_DLL文件生成的dll文件

如图所示

配置新建项目的目录

配置之前一定要检查平台,一定要和生成DLL的平台一致然后再配置接下来的文件

包含目录包含include

库目录包含lib

链接器-输入-附加依赖项包含lib文件名称

应用-确认。

至此配置全部完成,接下来在main函数中引用

#include <iostream>using namespace std;#include <BH_dll.h>int main(){cout << add(1, 0) << endl;cout << sub(1, 0) << endl;dllH DH;cout << DH.div(4, 2) << endl;cout << DH.mul(4, 2) << endl;cout << Cadd(1, 0) << endl;cout << Csub(1, 0) << endl;getchar();return 0;}

完成!

有什么说的不对的地方还请大佬们在评论区留言,我看到了会改正,谢谢各位。

接下来会学习Qt调用C++DLL,学会了还会更新一期,如果哪位大佬知道捷径的话麻烦放个传送门在评论区呗,谢谢啦。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。