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

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

編輯:Delphi

4) DLL窗口控制

正如3)中的代碼說明的那樣,DLL窗口的打開和關閉只是在表象層,關閉窗口並沒有真正釋放DLL窗口,只是調用API函數FindWindow根據窗口標識(就是Form.name)獲得窗體句柄,用SHOWWINDOW函數的nCmdShow參數控制窗口顯示/隱藏。

其實這是我這個程序實現的不好的一個地方,如果在DLL窗口中使用Self.close方法會引起內存錯誤,實在能力有限沒有辦法解決,因此出此下策。所以每個DLL程序主窗口的關閉按鈕都必須隱藏掉。 :-P

5) DLL庫的釋放

在程序退出時,必須根據插件信息實例逐一釋放DLL庫。釋放DLL庫的函數如下:

procedure TFormHall.ClosePlugin(aPLG:TMyPlugins);
var
 FreeDLLForm:TFreeDLLForm;
begin
 if aPLG.ProcAddr = 0 then exit;
 if aPLG.FuncFreeAddr = nil then exit;
 @FreeDLLForm:=aPLG.FuncFreeAddr;
 if not FreeDLLForm(Application.Handle,’’,’’) then
  showMessage(’err’);
end;

小結

本實例程序運行效果如下:

我以上的方法中,因為有不少能力有限沒有解決的問題,所以采用了一些看起來不太合理的掩飾方法,希望大家能在做了一點嘗試後設計出更好的解決方法,我也希望能學到更多的好方法。

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