delph XE下測試通過. Dll項目文件 [delphi] library Project10; uses SysUtils, Classes, Forms, Unit14 in 'Unit14.pas' {Form1}; {$R *.res} Function EDebtMoney(H: THandle): integer; begin Application.Handle := H; with TForm1.Create(Application) do try ShowModal; Result := 0; finally Free; { 調用結束時銷毀窗口 } end; end; Function GetForm(H: THandle): THandle; begin Application.Handle := H; with TForm1.Create(Application) do try Show; Result := Handle; except on e : Exception do raise e.Create(e.Message); end; end; exports EDebtMoney, GetForm; begin end. dll中窗體關閉事件 [delphi] procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; 調用單元 [delphi] unit Unit13; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm13 = class(TForm) btn1: TButton; btn2: TButton; procedure btn1Click(Sender: TObject); procedure btn2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form13: TForm13; function MyForm(H: THandle) : THandle; stdcall; implementation function MyForm; external 'Project10.dll' name 'GetForm'; {$R *.dfm} //動態調用 模態窗口 procedure TForm13.btn1Click(Sender: TObject); type TGetForm = function (H: THandle) : Integer; cdecl; var DllForm : TGetForm; DllHandle : THandle; nn : integer; begin DllHandle := LoadLibrary(PChar('Project10.dll')); try if DllHandle <> 0 then begin DllForm := GetProcAddress(DllHandle, 'EDebtMoney'); nn := DllForm(Application.Handle) ; self.Caption := inttostr(nn); end; finally FreeLibrary(DllHandle); end; end; //靜態調用 非模態窗口 procedure TForm13.btn2Click(Sender: TObject); var DllHandle : THandle; begin DllHandle := MyForm(Application.Handle); end; end.