方案一:
在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文件.