不多說了,看代碼就應該明白了,曾經我遇到的問題,現在放出來大家共享!
這裡是工程文件的部分:
在DLL中封裝MDI子窗體需要重寫DLL入口函數,具體代碼如下:
1var
2 DllApp: TApplication;//定義保存原DLL的TApplication對象
3 DllScr: TScreen;//定義保存原DLL的TScreen對象
4
5procedure UnProcDll(Reason: Integer); register;
6//重新定義DLL入口函數
7begin
8 if Reason = DLL_PROCESS_DETACH then
9 begin
10 Application := DllApp;
11 Screen := DllScr;
12 end;
13end;
14
15//初始化區
16begin
17 DllApp := Application;//備份原DLL的TApplication對象
18 DllScr := Screen;//備份原DLL的TScreen對象
19 DllProc := @UnProcDll;//將重寫後的入口函數地址付給DLLProc
20end.
這裡是需要導出的函數,寫在工程文件或者一個單元的接口部分:
1function ShowForm(App: TApplication; Scr: TScreen; Owner: TForm):TForm; export; stdcall;
2begin
3 //下面的這兩個變量是必須的
4 Application := App;//這個就是調用的時候對Application對象重新賦值
5 Screen := Scr;//對Screen對象賦值
6 //函數自定義代碼
7 if not Assigned(Form1) then
8 begin
9 //Application.CreateForm(TForm1, Form1);
10 Form1 := TForm1.Create(Owner);
11 Result := Form1;
12 end
13 else
14 Result := Form1;
15 //函數自定義代碼結束
16end;
最後在工程文件把這個函數導出來就OK了。
1//最後導出這個函數
2exports
3 ShowForm;