剖析外掛程式技術 轉貼

2021-03-31 16:39:04 字數 1816 閱讀 3939

剖析外掛程式技術

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併發處理技術 一 併發處理 資料庫的特點就是資料的集中管理和共享。在通常情況下總是有 若干個事務併發地執行,這些並行的事務可能併發地訪問相同的資料。因此,資料庫管理系統的乙個重要任務就是要有一種機制去保證這種 併發的訪問和修改不破壞資料的完整性,確保這些事務能正確地執行 並取得正確的結果...

區塊鏈技術剖析(技術篇)

作者的話 一聽到區塊鏈技術,大多數人都會覺得很神秘,論壇上的所謂的大神們一談到區塊鏈都會拿出什麼 共識機制 對等網路 等名詞來唬人,其實在這裡我想給大家說的是,區塊鏈本身不是什麼新技術,什麼?不是新技術?你開玩笑吧?區塊鏈也是這幾年才興起的,怎麼能不算新技術呢?好吧,凡是有這樣的認識的人,可以說對區...