DLL创建与使用

本文最后更新于:5 个月前

1. 前言

在一些项目开发过程中,有时需要将自己写的C++程序给别人调用。如何去做呢?我们可以将C++代码编译为.dll结尾的文件,然后在其他项目中使用这个文件,从而调用里面的应用程序。

2. 生成.dll文件

2.1 使用VS2019创建项目

创建动态链接库项目->下一步

img

创建名为Dll2的项目名

img

创建的项目会自动生成一些文件,包括framework.h/pch.h/dllmain.cpp/pch.cpp文件,如下:

img

对于pch.h预编译头的处理,如果一些较小的项目可以忽略不计。对于一些大项目,或者包含很多需要预编译的宏定义时,可以考虑使用者预编译头,它可以提高程序的执行效率。

img

如果想去掉这一行#include “pch.h”,也可以在项目名上->右键->属性->配置属性->C/C++->预编译头->不使用预编译头。如果不这样操作,删掉pch.h文件后,生成解决方案时会出现错误,如上。

2.2 编写工程代码

删掉一些不需要的自动生成的代码,创建两个简单的代码,math2.h和math2.cpp文件,文件目录如下:

img

math2.h代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#pragma once

#ifdef SimpleClass_EXPORTS2 // 本项目C++预编译头
#define TEST_DLL __declspec(dllexport) // 设置导出库
#else
#define TEST_DLL __declspec(dllimport) // 设置导入库
#endif


class TEST_DLL MyClass
{
public:
MyClass();
~MyClass();
int add(int a, int b);
int mul(int a, int b);
int getA();
int getB();
private:

int a;
int b;
};

math2.cpp代码如下:
#include "math2.h"


MyClass::MyClass()
{
a = 0;
b = 0;
}

MyClass::~MyClass()
{
}

int MyClass::add(int a, int b) {
return a + b;
}

int MyClass::mul(int a, int b) {
return a * b;
}

int MyClass::getA() {
return a;
}

int MyClass::getB() {
return b;
}

2.3 生成.dll和.lib文件

生成.dll文件只需要在菜单栏的“生成”选择“生成解决方案”即可。

img

在代码的项目目录下,可以看到.dll文件和.lib文件,输出方式可以选择Debug模式或者Relese模式,选择不同模式生成的目录也会不同。

img

2.4 引用动态链接库

引用动态链接库时,主要有4个步骤,分别如下:

1)包含头文件目录

2)包含lib文件目录

3)链接器附加依赖项,添加lib文件

4)将dll文件复制到所需项目的文件中

新建空白项目

img

可以在新建的项目中,创建include和lib两个目录,include里包含需要引用的头文件,lib中包含.lib文件。dll文件复制到主函数同级目录中。

img

新建一个空白项目,命名为test2,再新建一个test2.cpp文件

img

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include "math2.h"

using namespace std;

int main() {

MyClass myclass = MyClass();

cout << myclass.add(2, 4) << endl;
cout << "hello world" << endl;
}

右键项目->属性->配置属性->VC++目录

包含目录:头文件

库目录:.lib文件

img

链接器->输入->附加依赖项,添加.lib文件名

img

运行结果:

img


DLL创建与使用
https://dfqx.github.io/2023/05/03/DLL创建与使用/
作者
大风起兮
发布于
2023年5月3日
更新于
2023年5月5日
许可协议