一种C++ DLL接口封装的基本方法

一种C++ DLL接口封装的基本方法       

        在产品开发过程中,我们经常会需要对外提供DLL的接口,这种接口可以在产品开是设计好的,也可能是在基本功能开发完成进行封装的,这里将介绍一种比较基本常用的封装方法,供初学者参考。欢迎提出好的改进方式。

先提几点要求,包含我们的目标、要求和本文范围等,

1、对外提供的文件清晰,只包含必需的头文件、DLL文件及LIB文件

2、不暴露用户不需要知道的多余信息

3、这里只设计封装过程与思路,包含DLL相关的实现以及代码工程配置等信息

 

首先你可以先配置好你想发布的目录文件夹,
例如:包含三个对外发布的文件夹,名称分别为BIN、INCLUDE、LIB,BIN里放发布所需要的DLL,INCLUDE只存放发布的头文件,LIB文件夹里放生成的LIB文件
你的实现的工程文件放在工程文件夹里就可以了

//---------------------接口文件 IMyDLL.h ------  //这个文件应该放在对外发布的INCLUDE文件下,供外部使用
// 这个是对外发布的接口,这个文件里只包含对外提供的方法,不会包含私有方法和属性
class IMyDLL        // 这个类是对外发布的,所有方法均是纯虚的,不会暴露实现
{
public:
     virtual void Init() = 0;  // 纯虚的,对外的都是纯虚的
//  privata:
//  int a;          // 这样的属性不是对外发布的,就不把它放在对外接口头文件里
}

//-------------------实现文件 MyDLLImpl.h --------
//继承IMyDLL
#include "IMyDLL.h"  // 这个是具体实现的类,放在工程文件目录下就可以了,不需要对外发布

class CMyDLLImpl : public IMyDLL   // 从对外接口类继承,负责具体实现
{
public:
      virtual void Init(); // 如果还设计为可被继承,就写成虚的,不是虚的普通方法也可以,这个地方有个是否使用虚析构的问题,要注意,不明白的话认真查下资料
privata:
      int a; //这个地方可以有,因为用户看不见
}

//-----------------实现文件 MyDLLImpl.cpp -------- // 这个是方法实现文件,没有什么好说的,放在工程目录下
#include "MyDLLImpl.h"

void CMyDLLImpl::Init()  
{
  ;  //真正实现的代码
//  这里可以使用声明过的变量a
}

上面的就是整个封装的框架,
下面是最重要的一步,提供用户创建对象的方法,因为前面对外发布的为抽象类,用户不能创建实例,所以:

// MyDllFactory.h // 对外发布
#include "IMyDLL.h"
class MyDllFactory
{
  IMyDLL* Create();  // 提供一个创建对象的方法       
}

// MyDllFactory.cpp
#include "MyDllFactory.h"
#include "MyDLLImpl.h"   // 注意这个很重要,由于是在CPP里,
IMyDLL* MyDllFactory::Create()
{
 return new CMyDLLImpl;
}

MyDllFactory类也可以写到对外接口的头文件中,因为这里只有1个方法,可以减少维护的文件数据,我经常把它和接口头文件写在一起。

对象的创建方法可能会有很多,可以根据实现情况进行修改,比如使用工厂模式、对象工厂等方法。


这样封装过程就完了,提供给用户的是MyDllFactory.h、IMyDLL.h、DLL文件和LIB文件
对外提供的文件中看不到任何多余的东西

用户调用的过程大概是这样的:
#include "MyDllFactory.h"
void f()
{
 MyDllFactory factory;
 IMyDLL* pDll = factory.Create();  //这样就创建出对象了
 pDll ->Init();
}

 

注:本文代码随手而手,未经过测试

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C++中的类是面向对象编程的基本单元,其中封装是其最重要的特征之一。封装可确保数据和函数都能被保护起来,不会被外部访问和修改,而只能通过类定义的公共接口来操作这些数据。 Dll是动态链接库(Dynamic Link Library)的缩写,它是一种文件,可以在编译时链接到可执行文件,也可以在运行时加载。封装在动态链接库中使用可以更好地保障其安全性和灵活性。 在C++中,类的封装可以被编译成动态链接库,也称为类库(Class Library)。这种方式可以使开发者将代码分成多个库文件,并且仅将需要的库文件链接到可执行文件中。这种方式可以在多个程序之间共享类定义和函数实现,减少代码重复并提高代码的可维护性。 同时,如果只需修改类库中的某个类的实现,而其他类的实现没有改变,那么只需重新编译该库就可以了,而不用重新编译所有代码。 在使用动态链接库时,需要使用C++的导出和导入关键字将类和函数导出到DLL中,并在可执行程序中使用它们。这些关键字包括__declspec(dllexport)和__declspec(dllimport)等。 总之,在C++中使用类的封装dll可以使代码变得更加安全,可维护性更高,并有效地减少代码重复。 ### 回答2: C语言中,类的封装需要使用结构体和函数来实现,其中结构体表示对象的属性,而函数则表示对象的方法。为了更好地维护代码,实现代码的复用,我们可以将类的封装通过dll动态链接库的方式实现。 首先,我们需要定义一个包含结构体和函数声明的header文件,用来描述类的结构和功能,然后将这个header文件编译成动态链接库,供其他程序调用。这样做的好处在于,只要我们在其他程序中引用了这个dll,就可以直接使用这个类,无需重新编写代码,提高了代码的复用性。 同时,在dll封装中,我们也需要注意一些问题,比如动态链接库的版本问题,如果不同的程序引用了不同版本的dll,可能会出现运行错误,所以需要在编写dll时考虑这些问题。在使用dll时,也需要注意动态链接库的加载和释放问题,防止出现内存泄漏等问题。 总之,通过dll封装,可以更加方便地实现C语言中的类的封装,提高代码的复用性和可维护性,但需要在实现过程中注意一些问题,提高代码的质量。 ### 回答3: C++类的封装 DLL一种将类库打包为可重用代码的方式。DLL全称为Dynamic Link Library,动态链接库。它是一种Windows系统下的动态链接库文件,提供了一种动态加载可以在运行时执行的代码和数据的方式。使用DLL的好处在于,它可以节省资源并提高程序的灵活性。 C++类的封装 DLL可以将类封装为可直接调用的动态链接库。这样,其他程序就可以直接使用这个类库,而无需自行编写相应的代码。使用DLL可以使程序员们更加专注于自己的工作而不必担心代码的实现细节。 封装DLL还有另外一些优点,例如:DLL文件可以被多个应用程序所共享,因此可以减少内存的消耗,提高程序的运行效率。同时,类库也可以在项目开发过程中进行独立开发和单元测试,这样可以更好地提高程序的质量和可维护性。 总之,C++类的封装 DLL一种非常有用的开发技术,它能够有效地提高程序的复用性、可移植性和可维护性。因此,对于需要维护大型项目的开发团队来说,封装DLL一种非常具有实际意义的开发策略。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值