剖析外掛技術 (轉)
剖析技術
作者:太子
to: tablejiang@21cn.com">mailto: tablejiang@21cn.com
轉載請保證文件的完整性。
很多人對外掛技術很感興趣,這兩天我對器的外掛技術的原理做了些研究,現在就把
一些心得寫出來。
外掛原理就是透過統一的介面來不同的模組,以實現不同功能的呼叫。用來擴充
主程式的功能。
現在我們來談談它的實現。
外掛技術的實現,一般都是先定義好一個介面結構。這個結構包含了主程式要引用的接
口的指標。當然,這些介面函式的格式必須是事先定義好了的。
而在外掛Dll中一般只有一個匯出函式,利用這個匯出函式,我們可以得到介面結構的指標。
這樣主程式就可以透過指標來使用外掛模組中的功能了。
舉個例子:
我們先定義好包含介面函式的結構:
typedef struct PlugInModule{
D Ver ; 本
char *Author ; 者說明
char *Description; 塊說明
BYTE *InputPointer; 入資料 [in/out]
DWORD dwSize ; 入資料的大小 [in]
HWND hParentWnd ; 視窗 [in]
HINSTANCE hDllInst ; 控制程式碼 [in]
void (*PlugIn_Config)( struct PlugInModule * pModule ) ; 置函式
void (*PlugIn_Init)( struct PlugInModule * pModule ) ; 始化函式
void (*PlugIn_Quit)( struct PlugInModule * pModule ) ; 出函式
void (*PlugIn_Run )( struct PlugInModule * pModule ) ; 行函式
} 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 )
{
char szDisplay[260] ;
sprintf( szDisplay , "%s , config 模組" , pModule->Description ) ;
MessageBox( NULL , "config" , pModule->Author , MB_OK ) ;
}
void JhmDll_Init( struct PlugInModule * pModule )
{
char szDisplay[260] ;
sprintf( szDisplay , "%s , Init 模組" , pModule->Description ) ;
MessageBox( NULL , "Init" , pModule->Author , MB_OK ) ;
}
void JhmDll_Quit( struct PlugInModule * pModule )
{
char szDisplay[260] ;
sprintf( szDisplay , "%s , Quit 模組" , pModule->Description ) ;
MessageBox( NULL , "Quit" , pModule->Author , MB_OK ) ;
}
void JhmDll_Run( struct PlugInModule * pModule )
{
char szDisplay[260] ;
sprintf( szDisplay , "%s , Run 模組" , pModule->Description ) ;
MessageBox( NULL , "Run" , pModule->Author , MB_OK ) ;
}
這樣,我們就定義好了介面函式。
當然,我們必須把它們加入到介面結構中去。
這樣,再定義一個介面結構,並同時初始化:
始化介面
PlugInModule module =
{
0x0100 ,
"Table.JHM.太子" ,
"示範外掛技術1--空模組" ,
NULL ,
0 ,
NULL ,
NULL ,
JhmDll_Config ,
JhmDll_Init ,
JhmDll_Quit ,
JhmDll_Run ,
};
然後再定義Dll的匯出函式
件的介面
#ifdef __cplusplus
extern "C"
{
#endif
__declspec( dllexport ) PlugInModule *GetPlugInModuleFunction()
{
return &module;
}
#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 ) ; 行函式
這些外掛函式的功能了。
這只是個人想法,如果有不同意見的可以 。歡迎討論。
如果需要更詳細的內容,大家可以到.51"> 或 ft.51.net"> 去
示範。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1004496/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 外掛化技術:宿主訪問外掛資源
- 遊戲反外掛技術揭祕遊戲
- 外掛輔助技術研究教程
- 跨瀏覽器外掛技術瀏覽器
- 技術乾貨 | 反外掛技術的革新:如何有效應對 FPS 外掛的威脅
- framework外掛化技術-類載入Framework
- 外掛製作--------過NP技術漸漸
- 剖析公司技術棧
- Javascript 技術原理剖析JavaScript
- 解密|一文帶你看懂外掛技術解密
- Android外掛化技術之旅 1 開篇 - 實現啟動外掛與呼叫外掛中的Activity和ServiceAndroid
- 防火牆新技術剖析防火牆
- 遊戲外掛教程(轉)遊戲
- framework外掛化技術-資源載入(免安裝)Framework
- 技術分享 | 一款功能全面的 MySQL Shell 外掛MySql
- 學習外掛編寫開發所必備技術
- 手遊防破解防外掛技術方案(一)客戶端篇客戶端
- 240個jquery外掛(轉)jQuery
- 國內外精彩.NET技術站點蒐集[轉]
- DartVM GC 深度剖析|得物技術DartGC
- 外來鍵技術
- 外掛化實現Android多主題功能原理剖析Android
- 最新的關於BSP技術的深入剖析與詳解3(轉)
- Gulp的代理轉發外掛
- SOLIDWORKS批次轉格式外掛Solid
- [轉]OpenLiveWriter 程式碼外掛
- 來自松本行弘的技術剖析
- 如何給Flutter寫一個高德地圖定位外掛 | 掘金技術徵文Flutter地圖
- 網路安全從“外掛”轉向“內生” 可信計算成為安全技術拼圖中一環
- 常用Maven外掛介紹(轉載)Maven
- 推薦60個jQuery外掛(轉)jQuery
- Cinemachine相機控制外掛(轉載)Mac
- Android外掛化系列三:技術流派和四大元件支援Android元件
- 簡單剖析智慧語音互動技術
- 深入剖析全鏈路灰度技術內幕
- 剖析《口袋妖怪復刻版》技術架構架構
- 醫療防“統方”技術原理深度剖析
- 【釣魚】與【反釣魚】的技術剖析