首页 > 编程语言 >封装C++项目为dll

封装C++项目为dll

时间:2024-07-14 16:53:25浏览次数:16  
标签:封装 函数 void C++ Label virtual IMyInterface MyHelloClass dll

这是头文件,定义了一个接口类 IMyInterface。

#pragma once

#ifndef MY_INTERFACE_H
#define MY_INTERFACE_H
#define _CRT_SECURE_NO_WARNINGS

#define MY_DLL_API __declspec(dllexport)  // 定义导出到DLL中的宏

// 接口类,用于导出到DLL
class MY_DLL_API IMyInterface
{
public:
    static IMyInterface* CreateInstance();  // 静态成员函数,用于创建接口实例

    virtual void Initialize() = 0;  // 纯虚函数,必须在派生类中实现
    virtual void Cleanup() = 0;     // 纯虚函数,必须在派生类中实现
    virtual char* GetLabel() = 0;   // 纯虚函数,必须在派生类中实现
};

#endif

这是实现上述接口的源文件,其中实现了一个具体类 MyHelloClass。

#include "Interface.h"
#include <iostream>
#include <cstring>  // 包含cstring库以使用memset和strcpy函数

// 具体类,实现接口IMyInterface
class MyHelloClass : public IMyInterface
{
public:
    MyHelloClass();  // 构造函数

    virtual void Initialize();  // 实现初始化函数
    virtual void Cleanup();     // 实现清理函数
    virtual char* GetLabel();   // 实现获取标签函数

private:
    char Label[1024];  // 存储标签的数组
};

// 构造函数,初始化Label数组
MyHelloClass::MyHelloClass()
{
    memset(Label, 0, 1024);     // 将Label数组初始化为全零
    strcpy(Label, "Hello");     // 将字符串"Hello"复制到Label数组中
}

// 初始化函数
void MyHelloClass::Initialize()
{
    printf("MyHelloClass::Initialize() \n");  // 打印初始化消息
}

// 清理函数
void MyHelloClass::Cleanup()
{
    printf("MyHelloClass::Cleanup() \n");  // 打印清理消息
}

// 获取标签函数,返回Label数组的指针
char* MyHelloClass::GetLabel()
{
    return Label;
}

// 实现静态成员函数,返回MyHelloClass实例的新对象
IMyInterface* IMyInterface::CreateInstance()
{
    return new MyHelloClass();
}

test demo

#include <iostream>
#include "libdll/Interface.h"  // 包含生成的头文件

#pragma comment(lib,"dll.lib")
int main()
{
	// 创建接口的实例
	IMyInterface* myInterface = IMyInterface::CreateInstance();

	if (myInterface)
	{
		// 调用初始化方法
		myInterface->Initialize();

		// 获取并打印标签
		char* label = myInterface->GetLabel();
		std::cout << "Label: " << label << std::endl;

		// 调用清理方法
		myInterface->Cleanup();

		// 释放实例
		delete myInterface;
	}
	else
	{
		std::cerr << "Failed to create interface instance." << std::endl;
	}

	return 0;
}

标签:封装,函数,void,C++,Label,virtual,IMyInterface,MyHelloClass,dll
From: https://www.cnblogs.com/mxh010211/p/18301640

相关文章

  • C++嵌入式压缩库bundle基础操作:内存压缩与zip文件操作
    bundle是一个轻量级的C++压缩库,集成在一对简洁的文件中(bundle.h和bundle.cpp),支持内存数据的压缩与解压缩,以及zip格式文件的操作,方便嵌入到C++程序中执行压缩、解压缩操作。本文将详细介绍如何使用bundle库进行高效的数据压缩处理。简介bundle库支持多种压缩算法,使用std::string......
  • lib与dll(静态库与动态库)
    在计算机软件开发中,lib和dll是两种不同的库文件类型,用于代码共享和模块化。以下是它们的详细解释:静态库(StaticLibrary-.lib)特点文件扩展名:通常为.lib(在Windows上)或.a(在Unix/Linux系统上)。编译时间链接:静态库在编译时被直接链接到目标应用程序中。这意味着在......
  • 高质量C/C++编程指南总结(四)—— 表达式和基本语句
    1.运算符优先级如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级。 2.复合表达式不要编写太复杂的复合表达式。不要有多用途的复合表达式。不要把程序中的复合表达式与“真正的数学表达式”混淆。 3.if语句不可将布尔变量直接与 ......
  • 高质量C/C++编程指南总结(三)—— 命名规则
    标识符应当直观,可望文知义。标识符的长度应当符合“min-length&& max-information”原则。命名规则尽量与所采用的操作系统或开发工具的风格保持一致。程序中不要仅靠大小写区分相似的标识符。程序中不要出现标识符完全相同的局部变量和全局变量。变量的名字应当使用“......
  • Allegro画焊盘封装
    Allegro画焊盘封装根据自己的理解和参考其他人的书籍总结一下用Allegro软件画焊盘的过程。本文档用的是17.4的版本。画焊盘封装用PadstackEditor软件,画元器件封装用Allegro软件。下面开始介绍使用PadstackEditor软件画焊盘封装。第一步:软件打开界面如下,注意左下角的单位选择,......
  • C++ PImpl模式、指向实现的指针、PImpl Idiom、隐藏实现细节
    C++PImpl模式、指向实现的指针、PImplIdiom、隐藏实现细节flyfishPImpl全称是“PointertoImplementation”,在中文中通常翻译为“指向实现的指针”或者“指向实现”。PImpl是一种编程技巧,通常用于C++中,通过这种技术,可以隐藏类的实现细节,达到信息隐藏和二进制兼容......
  • C++ 面试宝典之:空类大小究竟是不是 0?
    以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/pD4bIjX2kDzo8gbYRPktPQ首先,空类是什么?空类指的是不包含任何数据成员的类,但可能包含方法成员。实例化时,对象需要分配存储空间用于存放数据成员,数据成员的大小和数量......
  • 高质量C/C++编程指南总结(二)—— 文件版式
    1.空行在每个类声明之后、每个函数定义结束之后都要加空行。在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。2.代码行一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且方便于写注释。if、for、while、do等语句......
  • 高质量C/C++编程指南总结(一)—— 文件结构
    1.版权和版本的声明应位于头文件和定义文件的开头,主要包括的内容有:版本信息。文件名称、文件标识、摘要。当前的版本号、作者/修改者、完成日期。历史版本信息(取代版本、原作者、完成日期)。2.头文件结构为了防止头文件被重复引用,应当使用ifndef/define/endif结构产生......
  • 深入解析C++中的特殊成员函数:构造函数、析构函数、拷贝构造函数与赋值操作符
    深入解析C++中的特殊成员函数:构造函数、析构函数、拷贝构造函数与赋值操作符在C++编程的浩瀚宇宙中,构造函数、析构函数、拷贝构造函数和赋值操作符是构成对象生命周期和行为的四大基石。它们各自扮演着不可或缺的角色,确保了对象从创建到销毁,从复制到赋值的整个过程既安全又......