代码下载:https://download.csdn.net/download/weixin_42295969/86637699
一、以类的方式导出动态库
导出
流程
导出关键字定义为API——>定义要导出类的父类并定义要导出的函数为虚函数——>继承
父类并覆盖实现虚函数、定义c语言形式的导出的生成实例的函数——>ide中设置项目配置类型为dll
1.定义导出关键字定义为API
#ifndef DLL_IMPORT
#define API __declspec(dllexport)
#else
#define API __declspec(dllimport)
#endif // !DLL_IMPORT
2.定义一个虚类:
这个虚类包括会包括需要导出的函数,需要设置为虚函数
同时这个类定义前面增加API也就是__declspec(dllexport)
class API InterfaceClass {
public:
int result;
//不建议在动态库中,直接导出C++基础数据类型数据.
//对于标准库,标准模板库中,不同版本的库有着不同的实现,msvc有着不同的实现,可能会发生更改,则会出现问题.
//因此推荐导出的都是C++的基础数据类型,即不需要引用的头文件的数据类型.
//这也是在基类中,使用纯虚函数的原因.
//std::string str;
virtual void setpath(string path) = 0;
virtual int read_Img() = 0;
};
3.实际继承的类的定义(对应的就是我们原本需要导出的类):
- 区别就是这里需要在函数面前加上虚函数的定义;
4.使用c语言形式导出函数,函数获得类的实例
使用c语言形式的导出动态库,利用这个动态库就可以获得对应的类的对象,其实现如下:
API InterfaceClass* getInstance()
{
InterfaceClass* ptr = new readImg();
return ptr;
}
5.将项目属性中配置类型设置为dll
导入
流程
include头文件——>设置目录以及库目录——>设置链接——>调用类
1.include头文件
include头文件:在项目中导入头文件
2.设置目录以及库目录
设置目录以及库目录:
3.设置链接
设置链接名字:
4.设置链接
在cpp文件中调用动态库的类:
使用getInstance()获得对象即可使用类的函数
int main()
{
InterfaceClass* readimg = getInstance();
readimg->setpath("D://test.JPG");
int ret=readimg->read_Img();
cout << ret << endl;
}