C++动态库的实现与调用

平台

  Visual Studio 2015
  Qt Creator

概述

  动态链接库(Dynamic Link Library)DLL文件与exe文件一样也是可执行文件,但是DLL也被称之为库,因为里面封装了各种类和函数等,就像是一个库一样,存储着很多东西,主要是用来调用的。调用方式主要分为两种:隐式(通过lib文件与头文件)与显式(只通过DLL文件)。
  代码复用是提高软件开发效率的重要途径。一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用。比较常见的例子是各种应用程序框架,ATLMFC等,它们都以源代码的形式发布。由于这种复用是源码级别的,源代码完全暴露给了程序员,因而称之为白盒复用。为了弥补白盒复用的不足,就提出了二进制级别的代码复用。使用二进制级别的代码复用一定程度上隐藏了源代码,对于缓解代码耦合现象起到了一定的作用。这样的复用被称为黑盒复用
  注:实现黑盒复用的途径不只dll一种,静态链接库甚至更高级的COM组件都是。

Visual Studio实现C++的动态链接库

创建动态链接库

新建工程项目CreateDLL

  打开Visual Studio 2015新建工程,并选择DLL应用程序类型。

创建.cpp和.h文件

  右击项目工程,添加->新建项,依次建立createDLL.cppcreateDLL.h文件。

编写文件

createDLL.h

1
__declspec(dllexport) void test_fun();

createDLL.cpp

  这里写了一个简单的hello world测试程序。

1
2
3
4
5
6
7
8
9
#include "createDLL.h"
#include <iostream>

using namespace std;

void test_fun()
{
cout << "hello world" << endl;
}

编译

  重新生成解决方案

文件位置

  在Debug文件夹下,有新生成的动态链接库文件。

使用动态链接库

新建工程UseDLL

  这里选择控制台应用程序。

添加文件

  将刚才的createDLL.dll,createDLL.libcreateDLL.h文件放到工程文件目录下。

  将刚才的`createDLL.dll`,`createDLL.lib`和`createDLL.h`文件分别放到工程文件目录下的头文件和资源文件中。

新建.cpp

  调用之前的函数即可。

1
2
3
4
5
6
7
#include "createDLL.h"

int main()
{
test_fun();
return 0;
}

QT实现C++的动态链接库

创建动态链接库

新建工程项目CreateDLL

  打开Qt Creator新建工程,并选择Library模板中的C++库

  重命名为Qt Creator,后续操作直接下一步即可。

  创建完成后,工程文件夹下会有3个文件。

编写类

  在createdll.hcreatedll.cpp文件中编写该类。如添加一个显示hello world的函数。

createdll.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef CREATEDLL_H
#define CREATEDLL_H

#include "createdll_global.h"

class CREATEDLLSHARED_EXPORT CreateDLL
{

public:
CreateDLL();
void test_fun(); // 添加的内容
};

#endif // CREATEDLL_H

createdll.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "createdll.h"

#include <iostream> // 添加的内容
using namespace std; // 添加的内容

CreateDLL::CreateDLL()
{
}

// 添加的内容
void CreateDLL::test_fun()
{
cout << "hello world" << endl;
}

编译

  构建->运行即可。如果没有报错,则在项目的同级文件夹下会产生一个名为build-CreateDLL-Desktop_Qt_5_8_0_MSVC2015_64bit-Debug文件夹(如果没有更改的话)。

文件位置

  打开其Debug文件夹,里面有新生成的dll库文件。

使用动态链接库

新建工程UseDLL

  打开Qt Creator新建工程,并选择Application模板中的Qt Console Application。其次和之前类似。

添加文件

  将刚才的createdll.hcreatedll.cpp文件放入到该工程的文件夹下。并添加至该工程项目中。


  除此之外,还有一个很重要的步骤!将刚才生成的CreateDLL.dll库文件(位于Debug文件夹下)添加至工程文件.pro中。语法规则为:LIBS += -L路径 -l库名(不需要加后缀)

编写.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <QCoreApplication>
#include "createdll.h" // 添加的内容

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

//添加的内容
CreateDLL cdll;
cdll.test_fun();

return a.exec();
}

  运行结果为:

谢谢老板!
-------------本文结束感谢您的阅读给个五星好评吧~~-------------