导出类和使用方式
#ifndef PCH_H
#define PCH_H
// 添加要在此处预编译的标头
#include "framework.h"
#ifdef _WIN32
#ifdef MYCLASS_EXPORTS
#define MYCLASS_API __declspec(dllexport)
#else
#define MYCLASS_API __declspec(dllimport)
#endif
#else
#define MYCLASS_API
#endif
class MYCLASS_API MyClass {
public:
MyClass();
~MyClass();
void SayHello();
};
#endif //PCH_H
使用 __declspec(dllexport) 标记类的导出
// pch.cpp: 与预编译标头对应的源文件
#include "pch.h"
#include <stdio.h>
#include <iostream>
// 当使用预编译的头时,需要使用此源文件,编译才能成功。
void MyClass::SayHello()
{
std::cout << "111" << std::endl;
}
生成后对应目录会生成对应的.dll 和 .lib两个库
在别的程序中需要使用该动态库.dll时,不仅需要将.dll放在对应的目录下,还需要配置如下属性
将该动态库对应的.lib添加到如下配置才可以使用导出类的动态库
配置成功后就可以new该导出类的对象
如果new出该类的对象成功后,类成员函数基本可以使用,但是有的成员函数不可以使用,大概率是.dll的头文件和.dll动态库 .lib库版本不一致导致的
导出函数
在项目中添加def文件
LIBRARY 后面是你的目标名字
EXPORTS 下面是要导出的函数名字,后面加上@1这些序号。
添加输入文件
如果写完之后直接运行,那么生成的dll还是没有函数导出,原因是因为没有添加输入文件,解决方法如下:
点击“调试”–“xx调试属性”,在“链接器”–“输入”里面选择添加你的文件名字,然后保存确认
重新生成解决方案,然后使用depends检测
可以看到函数都成功显示,导出成功!