C++轻量级通用插件框架平台 x3c-1.1.3 已支持 Mac OS X
openkk 13年前
<div id="p_fullcontent" class="detail"> <p><strong>X3 C++ PluginFramework</strong> 代号为X3的C++轻量级通用插件框架平台是一套通用的C++轻量级插件体系,没有使用MFC、ATL、COM。可在Windows和Linux下编译运行。应用程序可以基于X3插件框架进行快速开发,X3插件框架中的插件既可以单独使用,又可以灵活组合使用。X3插件框架已经过3年十几个系统的实际使用验证。</p> <p>目前X3插件框架包括插件内核部分(插件基础、插件管理器、Observer管理器插件、日志管理器插件)和实用技术插件(XML读写封装插件、数据库操作封装插件、文件操作实用插件、文本操作实用插件、本地化字符串表插件等)。</p> <p>Windows/Linux编译运行环境<br /> 本插件机制采用C++实现,用到了C++的RTTI机制和少量Windows API函数,没有使用MFC、ATL、STL,没有使用LIB文件,外部依赖文件少,没有使用VC++特殊编译指令。</p> <p>编译环境为</p> <p>1、Visual C++ 6.0/2003/2005/2008/2010,Windows</p> <p>2、MinGW GCC + Code::Blocks(IDE),Windows</p> <p>3、Linux GCC + Code::Blocks(IDE),Windows</p> <p>4、Linux GCC + Makefile</p> <p> </p> <p>X3插件框架的特点有:</p> <p>a) 接口定义简单灵活 <br /> 采用普通的C++接口,即由纯虚函数组成的结构体,不需要特殊的基类,不需要宏和UUID申明;同时可以使用C++的各种变量类型,不受COM接口那样的约束。例如下面的接口Ix_定义:</p> <p>interface Ix_Example<br /> {<br /> virtual void Foo() = 0; <br /> virtual void* GetData(std::vector& items) = 0; <br /> };</p> <p>b) 接口与实现分离 <br /> 对外提供接口文件,在插件内部用类来实现一个或多个接口,不需要对外导出该类或暴露实现细节。这样还有一个好处是只有约定了接口就可以让多个模块并行开发,模块相互之间不存在编译依赖(不需要其他插件的LIB等文件),这可用于测试驱动开发模式。</p> <p>c) 多接口转换、引用计数管理 <br /> 采用智能指针类来管理接口的引用计数及生命期,可从一个接口动态转换为另一个接口(内部采用C++的RTTI机制动态转换),可以区分插件内部的接口引用和插件外部的接口引用。</p> <p>d) 模块透明部署 <br /> 一个模块只需要使用其他模块的接口,不需要关心该接口是在哪个插件中实现的。可以根据需要将各个实现类进行合并或拆分,使其分布到不同插件中,而接口使用者不受影响。另外,插件部署于哪个目录也不影响插件接口的使用。</p> <p>e) 模块可替换、可扩展 <br /> 可根据需要替换某个插件,只有该插件实现了相同的接口,即使内部功能不相同,这样就实现了插件可替换、按需组合。通过在新的插件中支持更多的接口,可扩展更多的功能。可以在新插件中局部替换原有插件的某些接口或部分函数,实现重用和扩展。</p> <p>f) 线程安全性 <br /> 本插件机制所提供的内部实现文件考虑了线程安全性,允许多线程访问而不冲突,同时采用的是轻量级的锁定机制(计数原子锁定),运行开销很小。</p> <p>g) 跨版本 <br /> 允许不同版本的VC++开发的插件相互调用对方的接口,虽然实际中一般不需要这样做。由于没有采用VC++特殊的编译指令,因此容易移植到其他开发平台下。<br /> </p> <p>C++插件框架x3c发布了1.1.3版本,可在 Mac OS X 和 Linux 上编译。下面平台已经测试:</p> <p>1. Windows XP/2003/Win7, x86<br /> (a) VC++ 6.0 / 2005 / 2008<br /> (b) Code::Blocks 10.05 + MinGW GCC 4.5.1</p> <p>2. Windows 2008 x64 + VC++9.0 x64</p> <p>3. Linux 2.6.38 x86/x64, Ubantu<br /> (a) GCC 4.5.1 + Makefile<br /> (b) GCC + Code::Blocks 10.05</p> <p>4. Mac OS X 10.6.7 + GCC(XCode 4.0.1)<br /> (a) Makefile<br /> (b) Code::Blocks 10.05</p> <p>详情: <a href="/misc/goto?guid=4958187757600887167">http://www.cnblogs.com/rhcad/archive/2011/08/26/2154752.html</a></p> <p></p> </div>