话不多说,干货走起!!!!!!!****(侵删)
使用vs2019将C++封装成DLL并调用主要有以下几个步骤:
1)新建工程,编写要封装的.cpp和.h文件;
2) 生成动态链接库.dll和静态链接库.lib;
3) 调用通过.h文件调用;
第一步:编写.cpp和.h文件
本例工程名称为RunLIB
.cpp如下:
#include ""
#include<iostream>
class FHello :public IInterface
{
public:
FHello();
virtual void Init();
virtual void Destroy();
virtual char* GetName();
private:
char name[1024];
};
FHello::FHello()
{
memset(name, 0, 1024);
strcpy(name, "hello");
}
void FHello::Init()
{
printf("FHello::Init\n");
}
void FHello::Destroy()
{
printf("FHello::Destroy\n");
}
char* FHello::GetName()
{
return name;
}
IInterface* IInterface::CreateInterface()
{
return new FHello();
}
.h如下:
#ifndef PCH_H
#define PCH_H
#define _CRT_SECURE_NO_WARNINGS
#define FENGZHUANGCPP_API __declspec(dllexport) //导出
//动态链接库
class FENGZHUANGCPP_API IInterface
{
public:
static IInterface* CreateInterface();
virtual void Init() = 0;
virtual void Destroy() = 0;
virtual char *GetName() = 0;
};
#endif //PCH_H
第二步:生成动态链接库.dll和静态链接库.lib
①右键解决方案资源管理器的工程名称>>属性>>属性配置>>常规>>配置类型,将配置类型选为动态库(.dll),点击确定
②右键解决方案资源管理器的工程名称,选择生成
③右键解决方案资源管理器的工程名称>>属性>>属性配置>>常规>>配置类型,将配置类型选为静态库(.lib),点击确定
④右键解决方案资源管理器的工程名称,选择生成
此时,会在工程路径下的x64\Debug文件夹中看到你所生成的.dll和.lib文件(比如我的在:E:\C++\RunLIB\x64\Debug路径中)
到这里,我们已经完成了封装的过程,那么我们应该如何调用我们的接口呢?
第三步:调用通过.h文件调用;
①将生成的.dll和.lib,以及放在一个名为dllib的文件夹中(为了后面调用)
②使用vs新建一个名为diaoyong的工程(同时会自动生成一个),将①的文件夹复制到工程目录下
③在输入调用的代码
#include "dlllib/"
#include <iostream>
using namespace std;
#pragma comment(lib,"")
//动态库在运行时,会把代码链接到目标
//静态库在编译期,会把代码链接到目标
int main()
{
IInterface* IF = IInterface::CreateInterface();
cout << IF->GetName() << endl;
IF->Init();
IF->Destroy();
return 0;
}
此时,运行会出现如下报错,是因为我们没有把包含.lib的文件夹路径加载进来,我们需要执行的操作:
1)右键解决方案资源管理器的工程名称>>属性>>配置属性>>C/C++>>附加包含目录>>编辑>>.lib文件的路径放进去
2)右键解决方案资源管理器的工程名称>>属性>>项目属性>>配置属性>>链接器>>附加库目录>>编辑>>.lib文件的路径放进去
加载完成后,在运行我们编写的,就成功啦!!!!