平台:windows
编辑器: vs2019
自定义动态链接库
自定义动态链接库的创建及使用方式有很多,学习自定义动态链接库时记录一下常用方式。
动态链接库导出函数
自定义动态链接库可导出函数和类,先使用简单的使用函数导出的
方式一:
创建生成动态链接库项目
创建动态链接库项目,可选择空项目或动态链接库。并设置项目属性,设置项目生成类型,即配置类型
- 声明函数
创建计算周长头文件,声明计算矩形周函数,并在.cpp文件中实现。
实现函数
源码:
calculateGirth.h
#ifndef _CALCULATEGIRTH_H_
#define _CALCULATEGIRTH_H_
extern "C" _declspec(dllexport) double getRectangleGirth(double width, double height);
#endif
calculateGirth.cpp
#include "calculateGirth.h"
//计算矩形周长
double getRectangleGirth(double width, double height)
{
return (width + height)* 2;
}
创建动态链接库使用项目
设置项目属性:
- 设置包含目录
包含目录:寻找#include<xxxx.h>中的xxxx.h的搜索目录。
找到动态链接库头文件所在目录,复制路径,将该路径添加到包含目录中。
- 设置库目录
库目录:寻找.lib文件的搜索目录
找到动态链接库生成的 .lib 文件路径,将该路径添加到库目录
- 附加依赖项
附加依赖项:lib库(C++的库通常会把函数、类的声明放在*.h中,实现放在*.cpp或*.cc中。编译之后,*.cpp,*.cc,*.c会被打包成一个.lib文件,这样可以保护源代码)
找到我们生成的MyDllTest.lib 名称。将其添加到附加依赖项中。
也可以直接在代码中直接使用 #pragma comment(lib, "MyDllTest.lib")
源码:
usingDllTestMain.cpp
#include <iostream>
#include <calculateGirth.h>
using namespace std;
//#pragma comment(lib, "MyDllTest.lib")
int main() {
double width = 80;
double height = 100;
cout << "长度为:" << height<<"宽度为:"<<width << endl;
cout << "周长为:" << getRectangleGirth(width, height) << "米(m)" << endl;
return 0;
}
运行结果:
方式二
重新定义动态链接库头文件,适用于导出多个函数。
源码:
#ifndef _CALCULATEGIRTH_H_
#define _CALCULATEGIRTH_H_
#ifndef GIRTH_DLL_EXPORT
#define GIRTH_DLL_API extern "C" _declspec(dllexport)
#else
#define GIRTH_DLL_API extern "C" _declspec(dllimport)
#endif
GIRTH_DLL_API double getRectangleGirth(double width, double height);
#endif
其实使用方法不变