不多说了,看代码就应该明白了,曾经我遇到的问题,现在放出来大家共享!
这里是工程文件的部分:
在DLL中封装MDI子窗体需要重写DLL入口函数,具体代码如下:
1
var2
DllApp: TApplication;//定义保存原DLL的TApplication对象3
DllScr: TScreen;//定义保存原DLL的TScreen对象4

5
procedure UnProcDll(Reason: Integer); register;6
//重新定义DLL入口函数7
begin8
if Reason = DLL_PROCESS_DETACH then9
begin10
Application := DllApp;11
Screen := DllScr;12
end;13
end;14

15
//初始化区16
begin17
DllApp := Application;//备份原DLL的TApplication对象18
DllScr := Screen;//备份原DLL的TScreen对象19
DllProc := @UnProcDll;//将重写后的入口函数地址付给DLLProc20
end.这里是需要导出的函数,写在工程文件或者一个单元的接口部分:
1
function ShowForm(App: TApplication; Scr: TScreen; Owner: TForm):TForm; export; stdcall;2
begin3
//下面的这两个变量是必须的4
Application := App;//这个就是调用的时候对Application对象重新赋值5
Screen := Scr;//对Screen对象赋值6
//函数自定义代码7
if not Assigned(Form1) then8
begin9
//Application.CreateForm(TForm1, Form1);10
Form1 := TForm1.Create(Owner);11
Result := Form1;12
end13
else14
Result := Form1;15
//函数自定义代码结束16
end;最后在工程文件把这个函数导出来就OK了。
1
//最后导出这个函数2
exports3
ShowForm;