目录
参考链接:
在VS中创建和使用动态库_潘大仙是大锤的博客-CSDN博客_vs配置动态库
首先我们需要创建两个项目:
一个动态库项目程序
一个使用动态库的项目程序
这里我的动态库中简单的写了一个加法运算的函数,供别人使用。
一、创建动态库
创建成功后的目录结构如下
新建一个class文件编写函数代码
这里我添加了一个AddFun类
在AddFun.h文件中添加了
#pragma once
#ifdef DLL1_EXPORTS//C++预编译头
#define DLL1 __declspec(dllexport)//设置为导出库
#else
#define DLL1 __declspec(dllimport)//设置为导入库
#endif //DLL1_EXPORTS
这段代码可以导出dll文件和lib文件
其中的DLL1_EXPORTS我是从 选项---预处理器 中复制来的,即
然后在头文件编写了加法运算的函数
class AddFun
{
public:
int addInfo(int value1, int value2);
float addInfo(float value1, float value2);
};
最终头文件的结果是
而AddFun.cpp文件中,也只是简单的实现了加法函数
#include "pch.h"
#include "AddFun.h"
int AddFun::addInfo(int value1, int value2)
{
return value1+value2;
}
float AddFun::addInfo(float value1, float value2)
{
return value1+value2;
}
然后生成解决方案
发现生成结果只有dll文件,而没有lib文件
这里如果需要lib文件的话,只需要对代码做一点点改动
就是将之前的DLL1修改成DLL1_API,然后再在class后面添加一个DLL1_API即可。
然后就可以看到生成了lib文件和dll文件
接下来就可以开始使用这个动态库了
二、配置动态库
新建一个控制台项目
然后我在新建的控制台项目的解决方案同级目录下创建了三个文件夹
include、dll、lib
然后去刚才动态库生成的路径下取得lib和dll文件
然后取得动态库中加法函数的头文件
获取这三个文件后,按类别依次复制到刚刚新创建的三个文件夹中
大概就是这个样子
复制成功以后我们开始一些基础的动态库配置
配置头文件和lib文件路径
1、include文件夹
在包含目录中添加刚刚创建的文件夹include
2、lib文件夹
然后在刚刚包含目录下的库目录中添加lib文件夹
3、Dll1.lib文件
然后添加lib文件所在位置,注意这里是文件本身,而不是文件夹了。
添加你的lib文件名
然后应用---确定
之后就开始调用动态库了
三、使用动态库
在mian主函数中填写了以下代码
#include <iostream>
#include "AddFun.h"
int main()
{
AddFun add1;
std::cout << add1.addInfo(1, 3);
std::cout << "Hello World!\n";
system("pause");
return 0;
}
然后遇到了以下问题,说我丢失dll库
之后我找到了以下图方式打开的文件夹,将dll直接拖进该文件夹中得以解决问题。
但是我似乎感觉还有另一种解决方案,就是根据上述参考链接得知的。
解决方案是:在构建过程中将DLL复制到包含客户端可执行文件的目录中。
可以在“生成后事件”添加到项目中,以添加将DLL复制到生成输出目录的命令
操作: 属性页 - >“生成事件” -> “生成后事件” ->命令行,输入以下命令
xcopy /y /d “…\MathLibrarySolution(解决方案名称)$(IntDir)MathLibrary.dll(.dll文件名称)” “$(OutDir)”
但是这种方法我试验失败了,并没有弄明白,只知道把dll放到下面的文件夹中可以成功。
然后就程序就运行成功了,可以看到输出结果为4
完美结束!