剖析外掛程式技術
mailto: tablejiang@21**.***
外掛程式原理就是通過統一的程式介面來呼叫不同的模組,以實現不同功能的呼叫。用來擴充
主程式的功能。
現在我們來談談它的實現。
外掛程式技術的實現,一般都是先定義好乙個介面結構。這個結構包含了主程式要引用的接
口函式的指標。當然,這些介面函式的格式必須是事先定義好了的。
而在外掛程式dll中一般只有乙個匯出函式,利用這個匯出函式,我們可以得到介面結構的指標。
這樣主程式就可以通過指標來使用外掛程式模組中的功能了。
舉個例子:
我們先定義好包含介面函式的結構:
typedef struct pluginmodule pluginmodule ;
還有申明dll的匯出函式:
typedef pluginmodule* (*getpluginmodule)();
這樣,我們就定義好了乙個外掛程式的介面。
在外掛程式dll中,可以這樣實現。
申明和定義介面函式。
//函式定義
void jhmdll_config( struct pluginmodule * pmodule ) ; //設定函式
void jhmdll_init( struct pluginmodule * pmodule ) ; //初始化函式
void jhmdll_quit( struct pluginmodule * pmodule ) ; //退出函式
void jhmdll_run( struct pluginmodule * pmodule ) ; //執行函式
//模組函式實現
void jhmdll_config( struct pluginmodule * pmodule )
void jhmdll_init( struct pluginmodule * pmodule )
void jhmdll_quit( struct pluginmodule * pmodule )
void jhmdll_run( struct pluginmodule * pmodule )
這樣,我們就定義好了介面函式。
當然,我們必須把它們加入到介面結構中去。
這樣,再定義乙個介面結構,並同時初始化:
//初始化介面
pluginmodule module =
;然後再定義dll的匯出函式
//外掛程式的介面
#ifdef __cplusplus
extern "c"
#ifdef __cplusplus
}#endif
這樣,乙個外掛程式dll的介面功能就完成了,當然,你需要在介面函式中新增你的外掛程式功能**。
這樣主程式再通過動態載入dll,對映匯出函式位址, 就可以通過匯出函式
getpluginmodulefunction()得到乙個pluginmodule結構的指標。而pluginmoudle包含外掛程式功能
的功能函式位址,這樣就可以引用
void jhmdll_config( struct pluginmodule * pmodule ) ; //設定函式
void jhmdll_init( struct pluginmodule * pmodule ) ; //初始化函式
void jhmdll_quit( struct pluginmodule * pmodule ) ; //退出函式
void jhmdll_run( struct pluginmodule * pmodule ) ; //執行函式
這些外掛程式函式的功能了。
這只是個人想法,如果有不同意見的可以 email 。歡迎討論。
深度剖析Python 指令碼問題 轉貼
上述過程的關鍵點就在於c 和指令碼如何相互呼叫函式,以及如何傳遞引數與結果。一般的解決方法是在程式啟動時利用指令碼的api向指令碼註冊c 的擴充套件函式。將函式指標傳遞給指令碼系統以便將來呼叫,呼叫指令碼函式則使用指令碼系統的api將呼叫引數壓進棧,取得執行結果也要通過api進行。python 指令...
Oracle併發處理技術 轉貼
oracle併發處理技術 一 併發處理 資料庫的特點就是資料的集中管理和共享。在通常情況下總是有 若干個事務併發地執行,這些並行的事務可能併發地訪問相同的資料。因此,資料庫管理系統的乙個重要任務就是要有一種機制去保證這種 併發的訪問和修改不破壞資料的完整性,確保這些事務能正確地執行 並取得正確的結果...
區塊鏈技術剖析(技術篇)
作者的話 一聽到區塊鏈技術,大多數人都會覺得很神秘,論壇上的所謂的大神們一談到區塊鏈都會拿出什麼 共識機制 對等網路 等名詞來唬人,其實在這裡我想給大家說的是,區塊鏈本身不是什麼新技術,什麼?不是新技術?你開玩笑吧?區塊鏈也是這幾年才興起的,怎麼能不算新技術呢?好吧,凡是有這樣的認識的人,可以說對區...