方案一:
在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文件.
转自:http://www.cnblogs.com/Mckk/p/5272648.html