方案一:
在DLL工程中新建一個FORM窗體.在窗體中加入如下代碼:
1.首先需要再 implementation 之前聲明下以下函數.
1 procedure SynApp(App:THandle);stdcall; 2 3 begin 4 5 Application.Handle := App ; 6 7 end; 8 9 10 Procedure ShowForm;stdcall ; 11 12 begin 13 14 MainForm := TMainForm.Create(Application); 15 16 MainForm.show ; 17 18 end;
2.在DLL文件中導出表寫入:
1 exports 2 3 SynApp, 4 5 ShowForm;
3.讓窗口顯示需要傳入進程句柄.
1 SynApp(Application.Handle); 2 3 ShowForm;
完成.
方案二.此方案來自郁金香老師.
1.新建DLL.在DLL文件中添加一個FORM.
先在DLL文件中添加如下關鍵代碼:
1 if Form1 = nil then begin Form1.:= TForm1.Create(nil); 2 3 Form1.Visable: = not From1.Visable ; 4 5 end; 6 7 //但是這樣子會有問題..如果卸載這個DLL的時候,相應的程序也會跟著退出. 8 9 //所以必須寫一個加載卸載處理函數 10 11 procedure DllEnterProc(reason:integer); 12 13 begin 14 15 case reason of 16 17 windows.DLL_PROCESS_ATTACH: begin end; 18 19 windows.DLL_PROCESS_DETACH:begin Form1.Free;Form1.nil; end; 20 21 end; 22 23
在最後一個end. 之前添加如下關鍵代碼:
1 dllProc:=@DllEnterProc ;
完成..這樣既可創建含有窗體的DLL文件.