基類為抽象類,在不同的動態庫中實現不同的執行行為,但是每個動態庫要提供2個統一的方法:1) baseclass * create(); 2) void destroy( baseclass* );,呼叫該實際類的上下文,通過dlopen,dlsym( dl, "create"), dlsym( dl, "destroy")來獲得實際物件的控制代碼。實際上是一種工廠/builder模型。
1. 基類
#include class
baseclass ;
virtual ~baseclass(){};
};//
typedef baseclass* create_t();
typedef baseclass* (*create_t)();
typedef
void (*destroy_t)(baseclass*);
2. 繼承類
#include "base.h
"#include
class a: public
baseclass
};//
the class factories
extern"c
" baseclass*create()
extern"c
"void destroy(baseclass*p)
編譯方法:
> g++ -g -fpic a.cpp
> g++ -g -shared -o liba.so a.o
3. 呼叫類
#include "base.h"void *load_so(const
char*so_path)
return
dl;}
int test_so(void *dl)
create_t create_func = (create_t) dlsym(dl, "
create");
destroy_t destroy_func = (destroy_t) dlsym(dl, "
destroy");
if (!create_func || !destroy_func)
baseclass* base =create_func();
base->test();
destroy_func(
base
); dlclose(dl);
return0;
}int main()
基於jQuery 的外掛程式開發
談到jquery,對於開發人員是再熟悉不過了,從其誕生發展到到目前,一路走來,歷經風雨變化十幾載,依舊是開發人員使用最廣泛 最常用 也是最成熟的js庫。但其再成熟也不可能開發出所有的功能,於是乎就用了外掛程式這麼一說,用來拓展和補充jquery 的功能。外掛程式開發最常用的兩種方法 1.擴充套件 j...
模型驅動開發 基本模型 外掛程式模型的開發方法
任何乙個複雜的系統都應該存在簡單的規則,可以使用一些基本元素組合構建而成。這樣的系統在數學上被認為是簡潔和優美的。這一點在軟體中最容易歸納出來。人們也一直試圖找出一種簡潔方便方法和系統來構建軟體。軟體的乙個特性是相似性。我們寫過大量 後會發現 很多 都有相當程度的相似性。我們每個人每天只是重複寫其他...
模型驅動開發 基本模型 外掛程式模型的開發方法
任何乙個複雜的系統都應該存在簡單的規則,可以使用一些基本元素組合構建而成。這樣的系統在數學上被認為是簡潔和優美的。這一點在軟體中最容易歸納出來。人們也一直試圖找出一種簡潔方便方法和系統來構建軟體。軟體的乙個特性是相似性。我們寫過大量 後會發現 很多 都有相當程度的相似性。我們每個人每天只是重複寫其他...