visual stdio动态库的使用

导出类和使用方式

#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 
#include 
// 当使用预编译的头时,需要使用此源文件,编译才能成功。
void MyClass::SayHello()
{
	std::cout << "111" << std::endl;
}

生成后对应目录会生成对应的.dll 和 .lib两个库

在别的程序中需要使用该动态库.dll时,不仅需要将.dll放在对应的目录下,还需要配置如下属性
将该动态库对应的.lib添加到如下配置才可以使用导出类的动态库
visual stdio动态库的使用_第1张图片
配置成功后就可以new该导出类的对象
如果new出该类的对象成功后,类成员函数基本可以使用,但是有的成员函数不可以使用,大概率是.dll的头文件和.dll动态库 .lib库版本不一致导致的

导出函数

在项目中添加def文件
visual stdio动态库的使用_第2张图片
LIBRARY 后面是你的目标名字
EXPORTS 下面是要导出的函数名字,后面加上@1这些序号。

visual stdio动态库的使用_第3张图片
添加输入文件
如果写完之后直接运行,那么生成的dll还是没有函数导出,原因是因为没有添加输入文件,解决方法如下:

点击“调试”–“xx调试属性”,在“链接器”–“输入”里面选择添加你的文件名字,然后保存确认
visual stdio动态库的使用_第4张图片

重新生成解决方案,然后使用depends检测
visual stdio动态库的使用_第5张图片

可以看到函数都成功显示,导出成功!

你可能感兴趣的:(c++)