程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 初探Delphi中的插件編程(4)

初探Delphi中的插件編程(4)

編輯:Delphi

2、載入DLL庫文件

通過調用API函數LoadLibrary可以將DLL庫載入到內存中,在此我們不討論DLL對內存管理的影響。LoadLibrary的參數是DLL文件的地址路徑,如果載入成功會返回一個CARDINAL類型的變量作為DLL庫的句柄;如果目標文件不存在或其他原因導致載入DLL文件失敗會返回一個0。

3、實例化接口函數

獲得接口函數指針的API函數為GetProcAddress(庫文件句柄,函數名稱),如果找到函數則會返回該函數的指針,如果失敗則返回NIL。

使用上文定義的函數類型定義函數指針變量,然後使用@操作符獲得函數地址,這樣就可以使用指針變量訪問函數。主要代碼如下:

……
var
 ShowDLLForm: TShowDLLForm; //DLL接口函數實例
 FreeDLLForm: TFreeDLLForm;
begin
 try
 begin
  APlugin.ProcAddr := LoadLibrary(PChar(sPath));
  APlugin.FuncFreeAddr := GetProcAddress(APlugin.ProcAddr,’FreeDLLForm’);
  APlugin.FuncAddr := GetProcAddress(APlugin.ProcAddr ,’ShowDLLForm’);
  @ShowDLLForm:=APlugin.FuncAddr ;
  @FreeDLLForm:=APlugin.FuncFreeAddr;
  if ShowDllForm(Self.Handle, APlugin.Caption , APlugin.UserID) then
   Result:=True
   ……

4、一個具體的實現方法

為了結構化管理插件,方便今後的系統擴充,我們可以結合數據庫記錄可用的DLL信息,然後通過查詢數據庫記錄動態訪問DLL程序。

1) 系統模塊表設計

對於MIS系統,可以利用已有的DBS條件建立一個系統模塊表,記錄DLL文件及映射到系統模塊中的相關信息

字段名 作用 類型 AutoID 索引 INT modAlias 模塊別稱 VARCHAR modName 模塊名稱 VARCHAR modWndClass 窗體唯一標識 VARCHAR modFile DLL路徑 VARCHAR modMemo 備注 TEXT

·模塊別稱是用來在編程設計階段統一命名的規則,特別是團隊開發時可以供隊員參考。

·模塊名稱將作為ACAPTION參數傳遞給SHOWDLLFORM函數作為DLL窗口的標題。

·窗體唯一標識是DLL子模塊中主窗口的CLASSNAME,用來在運行時確定要控制的窗口。

·DLL路徑保存DLL文件名稱,程序中將轉換為絕對路徑。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved