首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 利用 DLL 實現窗體重用:標準流程與完整實例(上)

     編輯:Delphi

將 Delphi 設計的窗體封裝進動態連結庫(DLL),是實現跨專案、跨語言 UI 復用的經典方案。本文系統闡述標準化開發流程,並以「密碼設定/驗證 DLL」為例完整演示從設計到編譯的全過程。

10.4.1 窗體重用 DLL 開發標準流程(6 步驟)

  1. 設計窗體:在 IDE 中按需設計視窗介面與元件佈局。
  2. 撰寫匯出函式/程序:在獨立單元中定義函式,負責實例化窗體、顯示模態對話框、處理結果並回傳資料。
  3. 重複上述步驟:完成所有需重用窗體的設計與封裝。
  4. 修改專案檔(關鍵):
    • 將 program 改為 library;
    • 從 uses 移除 Forms 單元;
    • 清空 begin...end. 之間的啟動代碼;
    • 在 uses 下方、begin 前加入 exports 子句列出匯出函式名。
  5. 編譯產出 .dll:產生可供外部呼叫的動態連結庫檔案。
  6. 外部應用呼叫:同一般 DLL 函式呼叫方式(靜態/動態載入)。

10.4.2 實例:PassForm.dll 設計全記錄

兩大窗體職責

  • TSetPassWordForm:密碼**設定**窗體,含雙重驗證邏輯。
  • TGetPasswordForm:密碼**驗證**窗體,單純比對回傳布林值。

TSetPassWordForm 類別結構

type
  TSetPassWordForm = class(TForm)
    Label1: TLabel; Edit1: TEdit; OKBtn, CancelBtn: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    Verified: Boolean;          // 區分「首次輸入」與「二次確認」
  public
    PassWord: PChar;            // 供匯出函式讀取的密碼緩衝區
  end;

FormCreate 初始化

procedure TSetPassWordForm.FormCreate(Sender: TObject);
begin
  Verified := False;
  PassWord := StrAlloc(40);     // 預分配 40 字元緩衝區
  OKBtn.Enabled := False;       // 強制走完驗證流程
  Label1.Caption := 'Please Input PassWord:';
end;

匯出函式 SetPassWord

function SetPassWord(PWord: PChar): Boolean;
var SetPassWordForm: TSetPassWordForm;
begin
  Result := False;
  SetPassWordForm := TSetPassWordForm.Create(Application);
  try
    with SetPassWordForm do
      if ShowModal = mrOK then begin
        StrCopy(PWord, StrUpper(PassWord));  // 輸出大寫密碼
        Result := True;
      end;
  finally
    SetPassWordForm.Free;       // 保證記憶體釋放
  end;
end;

關鍵細節:

  • PWord 雖為輸出參數,但屬指標類型,呼叫端必須預先分配記憶體(StrAlloc),否則 StrCopy 會導致一般保護錯誤(GPF)。
  • try...finally 確保窗體實例在任何代碼路徑下皆正確釋放,避免資源洩漏。

DLL 專案檔最終形態

library PassForm;
uses
  GetPass in 'GETPASS.PAS' {PasswordForm},
  SetPass in 'SETPASS.PAS' {SetPassWordForm};
exports
  GetPassword, SetPassWord;
begin
end.

下一篇將詳細剖析 TGetPasswordForm 的驗證邏輯與 GetPassword 匯出函式的實現細節,以及 VB6 呼叫的完整代碼對照。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved