輕量級的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++特殊的編譯指令,因此容易移植到其他開發平臺下。