C++封装dll lib

.cpp:

cpp 复制代码
#include "FileName.h"
#include <iostream>
class FHello :public IInterface {
public:
	FHello();
	virtual void Init() ;
	virtual void destory() ;
	virtual void* getname() ;
	private:
		char Name[1024];

};
FHello::FHello() {
	memset(Name, 0, 1024);
	strcpy(Name, "Hello\n");
}
void FHello::Init() {
	printf("FHello:Init\n");
}

void FHello::destory() {
	printf("FHello:des\n");
}
void *FHello::getname() {
	return Name;
}

IInterface* IInterface::CreateInterface() {
	return new FHello();
}

.h:

cpp 复制代码
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#ifndef INTERFACE_H
//这是防止头文件重复包含的方式。如果 INTERFACE_H 没有被定义,那么定义它并包含以下代码。否则,跳过这些代码。
#define INTERFACE_H

#define FENGZHUANGCPP_API __declspec(dllexport)
//这个宏定义用于指示函数或类的导出。在 Windows 平台上,__declspec(dllexport) 指示编译器导出函数或类,使其可以被其他模块或程序使用。
class FENGZHUANGCPP_API IInterface {
	//动态链接库
	//静态链接库

public:
	static IInterface* CreateInterface();
	virtual void Init() = 0;
	virtual void destory() = 0;
	virtual void* getname() = 0;
};



#endif // !INTERFACE_H
//结束 #ifndef 预处理指令的范围。

__declspec(dllexport) 用于导出类和函数,__declspec(dllimport) 用于导入类和函数。

生成dll以及lib需在项目属性->general里面修改configuration type(VS)。

在vs中想要使用别人的dll或lib的话也需要在项目属性->VC++directiories里修改library directories

所使用的CPP:

cpp 复制代码
#include "dlllib/FileName.H" // 包含头文件,头文件中定义了 IInterface 接口
#include <iostream>          // 包含标准输入输出流库

#pragma comment(lib, "SNAKE2.lib") // 链接 SNAKE2.lib 库文件,这个库中应该包含 IInterface 的实现
using namespace std;               // 使用标准命名空间

int main() {
    IInterface *IF = IInterface::CreateInterface(); // 创建接口实例
    cout << IF->getname() << endl;                  // 输出接口实例的名称
    IF->Init();                                     // 初始化接口实例
    IF->destory();                                  // 销毁接口实例
    return 0;
}
相关推荐
菥蓂寻生7 小时前
STM32移植到GD32中以105为例
stm32·单片机·嵌入式硬件
§ꦿCFོ༉7 小时前
嵌入式八股文—C语言入门学习(四)
c语言·开发语言·学习
投图匠8 小时前
十种不同风格的 CTP接口 框架
开发语言·python
爱笑的k1111 小时前
nano-vllm 源码剖析:千行 Python 手写离线推理引擎的调度、显存与并行时序
开发语言·python·vllm
X1A0RAN12 小时前
PPT 图片批量处理教程:导出全部幻灯片 · 提取全部素材
开发语言·javascript·powerpoint
熊猫钓鱼>_>13 小时前
普通用户视角的端侧智能体验手记【鸿蒙心迹】
开发语言·人工智能·华为·智能手机·性能优化·ai编程·harmonyos
瑞雪兆丰年兮13 小时前
JavaWeb-day13-SpringBootWeb事务管理&AOP
java·开发语言·springboot·javaweb·事务·web·aop
布莱克60515 小时前
Swift 常量详解:从 let 到编译期优化
服务器·开发语言·ssh·swift·常量·let
布莱克60515 小时前
Swift 可选类型(Optionals)详解:从原理到实战
开发语言·安全·ssh·swift·optional·可选类型
老歌老听老掉牙16 小时前
案例 7:二维 Rosenbrock 函数最小值(香蕉函数)
c++·pso