轻量级的C++插件框架 - X3 C++ PluginFramework

分享到:

X3 C++ PluginFramework 代号为X3的C++轻量级通用插件框架平台是一套通用的C++轻量级插件体系,没有使用MFC、ATL、COM。可在Windows和Linux下编译运行。应用程序可以基于X3插件框架进行快速开发,X3插件框架中的插件既可以单独使用,又可以灵活组合使用。X3插件框架已经过3年十几个系统的实际使用验证。

目前X3插件框架包括插件内核部分(插件基础、插件管理器、Observer管理器插件、日志管理器插件)和实用技术插件(XML读写封装插件、数据库操作封装插件、文件操作实用插件、文本操作实用插件、本地化字符串表插件等)。

Windows/Linux编译运行环境
本插件机制采用C++实现,用到了C++的RTTI机制和少量Windows API函数,没有使用MFC、ATL、STL,没有使用LIB文件,外部依赖文件少,没有使用VC++特殊编译指令。

编译环境为

1、Visual C++ 6.0/2003/2005/2008/2010,Windows

2、MinGW GCC + Code::Blocks(IDE),Windows

3、Linux GCC + Code::Blocks(IDE),Windows

4、Linux GCC + Makefile

 

X3插件框架的特点有:

a) 接口定义简单灵活
采用普通的C++接口,即由纯虚函数组成的结构体,不需要特殊的基类,不需要宏和UUID申明;同时可以使用C++的各种变量类型,不受COM接口那样的约束。例如下面的接口Ix_定义:

interface Ix_Example
{
     virtual void Foo() = 0; 
     virtual void* GetData(std::vector& items) = 0; 
};

b) 接口与实现分离
对外提供接口文件,在插件内部用类来实现一个或多个接口,不需要对外导出该类或暴露实现细节。这样还有一个好处是只有约定了接口就可以让多个模块并行开发,模块相互之间不存在编译依赖(不需要其他插件的LIB等文件),这可用于测试驱动开发模式。

c) 多接口转换、引用计数管理
采用智能指针类来管理接口的引用计数及生命期,可从一个接口动态转换为另一个接口(内部采用C++的RTTI机制动态转换),可以区分插件内部的接口引用和插件外部的接口引用。

d) 模块透明部署
一个模块只需要使用其他模块的接口,不需要关心该接口是在哪个插件中实现的。可以根据需要将各个实现类进行合并或拆分,使其分布到不同插件中,而接口使用者不受影响。另外,插件部署于哪个目录也不影响插件接口的使用。

e) 模块可替换、可扩展
可根据需要替换某个插件,只有该插件实现了相同的接口,即使内部功能不相同,这样就实现了插件可替换、按需组合。通过在新的插件中支持更多的接口,可扩展更多的功能。可以在新插件中局部替换原有插件的某些接口或部分函数,实现重用和扩展。

f) 线程安全性
本插件机制所提供的内部实现文件考虑了线程安全性,允许多线程访问而不冲突,同时采用的是轻量级的锁定机制(计数原子锁定),运行开销很小。

g) 跨版本
允许不同版本的VC++开发的插件相互调用对方的接口,虽然实际中一般不需要这样做。由于没有采用VC++特殊的编译指令,因此容易移植到其他开发平台下。

项目主页:http://www.open-open.com/lib/view/home/1360138884236

昵    称:
验证码:

相关文档:

  • C++人工智能框架:OpenCog
    OpenCog 是一个人工智能和人工总体智能框架(AGI),OpenCog 的认知算法都是个体自身的创新,但是总体架构是坚持认知协同作用原则的。...
  • C/C++回调函数简要介绍
    在C/C++里面有个非常给力的库函数qsort,相信大家都用过。他的函数原型如下: void qsort(void *base,size_tnmemb,size_tsize, int(*compar)(constvoid*, con...
  • pst文件格式操作C++库 PST File Format SDK
    PST File Format SDK (pstsdk) 是一个跨平台的 C++ 库,用来读取Outlook中的pst文件格式,并提供数据写入的功能。...
  • C/C++内存分布
    一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等...
  • C语言编译器 nwcc
    nwcc 是一个Unix系统的C语言编译器,支持 FreeBSD/OpenBSD/Linux/Solaris on 80x86 (with nasm and gas), FreeBSD/Linux on AMD64 (with yasm and gas), Solaris on SPARC (64-bi...
  • C语言字符串库 AString
    AString一个轻量级的自动内存管理的C语言字符串库,可以方便的对字符串进行各种操作,而无需直接操作内存,同时,AString还提供了一个...
  • C实现的线程池 threadpool
    threadpool 是一个简单的 C 语言实现的线程池。...
  • 一个 C++ 的基准测试管理库:Celero
    对代码进行持续性开发和有意义的基准测试是一个复杂的任务。虽然测试工具本身(Intel® VTune™ Amplifier, SmartBear AQTime, Valgrind)与应用程...
  • Mirror C++ reflection library
    Mirror C++ 反射库提供了编译时和运行时的 C++ 程序元数据,例如命名空间、类型、枚举、类以及类成员和构造函数等。同时提供一些高级...
  • 跨平台的C++公共库:Dlib
    DLIB是一个通用的跨平台的C+ +库使用契约编程和现代C + +技术设计。...
  • 微软开源 C++ REST SDK
    C++ REST SDK 包含在 Casablanca 项目中。 Casablanca 是一个 C++ 本地库,旨在帮助开发者的 C++ 应用程序访问云服务。如果你想编写一个响应式的...
  • 嵌入式系统的C运行库 Newlib
    Newlib是一个面向嵌入式系统的C运行库。最初是由Cygnus Solutions收集组装的一个源代码集合,取名为newlib,现在由Red Hat维护,目前的最新的...
  • C++中对字符串进行插入、替换、删除操作
    C++中对字符串进行插入、替换、删除操作...
  • C++指针的概念解读 超详细
    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,...
  • 底层的 C 程序库 skalibs
    skalibs 是一组用于一般用途的、底层的 C 程序库,可替换标准 C 库的一些方法,主要用于构建很小的静态二进制文件。...
  • cppcheck - 静态 C/C++ 代码分析
    cppcheck是静态的C/C++ 代码分析工具,用以检查内存泄漏,错配的内存分配和释放,缓冲区溢出,以及更多的问题。...
  • hashmap的C语言实现
    hashmap的C语言实现...
  • C语言的hash表实现:uthash
    uthash是一个C语言的hash表实现。它以宏定义的方式实现hash表,不仅加快了运行的速度,而且与关键类型无关的优点。 uthash使用起来十...
  • C++的IO库 MeteoIO
    MeteoIO 是一个跨平台的 C++ 库,提供数据的格式化和协议无关的数据访问,提供安全可靠的I/O处理。...
  • 标准C语言库 Glibc
    Glibc 是提供系统调用和基本函数的 C 库,比如open, malloc, printf等等。所有动态连接的程序都要用到它。...