程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 在DLL動態鏈接庫中封裝VCL的MDI子窗體

在DLL動態鏈接庫中封裝VCL的MDI子窗體

編輯:Delphi

 不多說了,看代碼就應該明白了,曾經我遇到的問題,現在放出來大家共享!

  這裡是工程文件的部分:

  在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;


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