C++轻量级通用插件框架平台 X3C

Apache
C/C++ Python
Windows
2011-01-03
云贵高原

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++特殊的编译指令,因此容易移植到其他开发平台下。

加载中

评论(0)

暂无评论

发布轻量级C++插件框架: x3c 和 x3py

正式发布轻量级C++插件框架: x3c 和 x3py,欢迎使用和反馈意见。 (推荐)X3PY: https://github.com/rhcad/x3py Doc: https://github.com/rhcad/x3py/wiki(内容较多) 对x3c框架进行大量简化...

2012/02/17 10:43

C++插件框架 x3c-1.1.3 已支持 Mac OS X

C++插件框架x3c发布了1.1.3版本,可在 Mac OS X 和 Linux 上编译。下面平台已经测试: 1. Windows XP/2003/Win7, x86 (a) VC++ 6.0 / 2005 / 2008 (b) Code::Blocks 10.05 + MinGW GCC 4.5.1...

2011/08/29 13:47

C++通用插件框架 X3C 1.0.9,支持Linux

X3 C++ PluginFramework 发布了新版本1.0.9,距离上个版本1.0.8正好三个月,主要完善内容有: 1、移植到 Linux,加入 Makefile 文件,能够基本运行起来; 2、对内核文件进行局部完善,替换C...

2011/06/04 12:36

没有更多内容

加载失败,请刷新页面

没有更多内容

暂无问答

【解答】关于内核中没开MMU之前的虚拟地址物理地址转换问题

1. 内核没开MMU之前有虚拟地址吗?没有MMU哪来的虚拟地址? 答:有,因为加载时地址和运行时地址不同导致的没打开MMU之前也会有虚实地址问题。 2. 加载时地址和运行时地址什么区别,为什么有...

2014/11/14 09:34
26
0
JAVA-四元数类

public class Quaternion { private final double x0, x1, x2, x3; // 四元数构造函数 public Quaternion(double x0, double x1, double x2, double x3) { this.x0 = x0; this.x1 ......

2018/12/12 02:07
102
0
网页版几何画板开发笔记(九) 求两条线段交点

线段,直线,射线是常见几何对象, 为实现计算多边形面积的算法, 里面用到求两线段交点, 故而先推导 求线段交点的算法. 本来求线段, 直线交点算法很多不需要自己推导, 但因为编程需要具体计算方...

2013/11/15 14:38
60
0
国产高频闪存横空出世:华丽逆袭

前不久,我们评测过金泰克的X3 RGB,各方面它的性能表现都非常出色,就是3200MHz的频率可能不能满足某些强迫症或者高端玩家人群。 而这次评测室收到的这款金泰克X3内存时也有点懵逼,怎么一模...

06/12 21:33
31
0
核函数及R程序研究

k=matrix(c(4,0,0,0,3,1,0,1,3),3,3) eigen(k) V=matrix(c(eigen(k)$vectors[,2],eigen(k)$vectors[,3],eigen(k)$vectors[,1]),3,3) V=t(V) library("pracma", lib.loc="C:/Users/123456/Doc...

2014/04/02 11:09
144
0
国产高频闪存横空出世:华丽逆袭

前不久,我们评测过金泰克的X3 RGB,各方面它的性能表现都非常出色,就是3200MHz的频率可能不能满足某些强迫症或者高端玩家人群。 而这次评测室收到的这款金泰克X3内存时也有点懵逼,怎么一模...

06/12 23:25
13
0
R语言系列:构造拟合公式的几个技巧

在使用各种回归时,需要写明拟合公式。最常见的形式如下: y~x1+x2 #可以增加任意数量的自变量 若要加入自变量之间的交互作用,可以使用以下写法 y~x1+x2+x1:x2 y~(x1+x2)^2 #'^'表示最多n阶...

2013/05/23 11:46
573
0
ARMv8(aarch64)页表建立过程详细分析

目录 文件修订记录...2 目录...3 1ARMv8存储管理...4 1.1Aarch64 Linux中的内存布局... 4 1.2AArch64的虚拟地址格式...4 1.2.14K页时的虚拟地址...4 1.2.264K页时的虚拟地址...5 2head.S页表...

2014/11/14 09:35
463
0
hdu1071(抛物线,直线以及二重积分)

http://acm.hdu.edu.cn/showproblem.php?pid=1071 View Code // 抛物线 yp=a*(x-b)^2+c; // 直线 yz=k*x+s; // 二重积分公式: f(x0,x1)(yp-yz)*dx; #include " iostream " using namespace ...

2016/01/15 10:36
20
1
网页版几何画板开发笔记(五) 常用数学推导一

一元二次方程: ax^2 + bx + c = 0 解为(推导过程略): x = x=[-b±√(b²-4ac)]/2a 二元一次方程组: A1*x + B1*y + C1 = 0 ---- (1) A2*x + B2*y + C2 = 0 ---- (2) 解: (1)*A2 : A1*A2*x + ...

2013/11/04 12:47
109
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部