这篇文章主要介绍“C++如何封装成DLL并调用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++如何封装成DLL并调用”文章能帮助大家解决问题。
第一步:编写.cpp和.h文件
本例工程名称为RunLIB
.cpp如下:
#include "pch.h" #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 "); } void FHello::Destroy() { printf("FHello::Destroy "); } 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),点击确定
④右键解决方案资源管理器的工程名称,选择生成
此时,会在工程路径下的x64Debug文件夹中看到你所生成的.dll和.lib文件(比如我的在:E:C++RunLIBx64Debug路径中)
到这里,我们已经完成了封装的过程,那么我们应该如何调用我们的接口呢?
第三步:调用通过.h文件调用;
①将生成的.dll和.lib,以及pch.cpp放在一个名为dllib的文件夹中(为了后面调用)
②使用vs新建一个名为diaoyong的工程(同时会自动生成一个diaoyong.cpp),将①的文件夹复制到工程目录下
③在diaoyong.cpp输入调用的代码
#include "dlllib/pch.h" #include <iostream> using namespace std; #pragma comment(lib,"dLLL.lib") //动态库在运行时,会把代码链接到目标 //静态库在编译期,会把代码链接到目标 int main() { IInterface* IF = IInterface::CreateInterface(); cout << IF->GetName() << endl; IF->Init(); IF->Destroy(); return 0; }
此时,运行会出现如下报错,是因为我们没有把包含.lib的文件夹路径加载进来,我们需要执行的操作:
1)右键解决方案资源管理器的工程名称>>属性>>配置属性>>C/C++>>附加包含目录>>编辑>>.lib文件的路径放进去
2)右键解决方案资源管理器的工程名称>>属性>>项目属性>>配置属性>>链接器>>附加库目录>>编辑>>.lib文件的路径放进去
加载完成后,在运行我们编写的diaoyong.cpp,就成功啦!!!!