VS2022-C++创建和调用DLL动态链接库
前言:查了好久好久网上的资料C++调用动态链接库,试了好多方法(直接创建DLL、空项目创建的)都多多少少有些问题,然后最近找到一篇博客,非常详细,写的很不错,这里进行转载总结。
https://blog.csdn.net/LonelyBHBH/article/details/124422914
然后这里我补充了一些步骤,接下来看操作步骤:
第一步:创建C++空项目


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

第三步:编写头文件(重点)
图片显示部分是模板,名称可以自己起最重要的就是__declspec(dllexport)以及__declspec(dllimport)。一个是导出,一个是导入。

为像我一样懒人们提供代码粘贴
#pragma once
#ifndef BHDLL_d
#define BHDLL_d
//宏定义导出
#ifdef BHDLL_API//如果没有定义DLLH 就定义 DLLH __declspec(dllexport)
#define BHDLL_API _declspec(dllexport)//导出
#else
#define BHDLL_API _declspec(dllimport)//导入
#endif // DLLH_API_//如果没有定义DLLH 就定义 DLLH _API
//编写代码区域
//导出函数
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文件名称



应用-确认。
补充:这一步原作者忘记说了,这里的DLL是要复制到.exe同目录下的
第十步:将最开始导出的DLL项目中的DLL复制到引用的新项目中x64\Debug\main.exe同目录下

复制到下面x64\Deubg\main.exe同目录下,否则会报找不到dll

至此配置全部完成,接下来在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;
}

完成!
如果有什么请看原作者的博客:https://blog.csdn.net/LonelyBHBH/article/details/124422914
评论区有很多疑问可以解决,这里我只补充了一写,然后自己后续学习。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)