终朝只恨聚无多 發表於 2008-3-15 18:15:00

delphi中一个值得大家来考虑的DLL问题

<br>以下是我的原代码:<br>==========================================================================================<br>DPR&nbsp;&nbsp;单元代码<br>program&nbsp;Mdiform;<br>uses<br>&nbsp;&nbsp;Forms,<br>&nbsp;&nbsp;UMdiform&nbsp;in&nbsp;&acute;UMdiform.pas&acute;&nbsp;{Mainform},<br>&nbsp;&nbsp;UDM&nbsp;in&nbsp;&acute;UDM.pas&acute;&nbsp;{GlobalDM:&nbsp;TDataModule},<br>&nbsp;&nbsp;UFun&nbsp;in&nbsp;&acute;UFun.pas&acute;;<br>{$R&nbsp;*.res}<br>begin<br>&nbsp;&nbsp;Application.Initialize;<br>&nbsp;&nbsp;Application.CreateForm(TMainform,&nbsp;Mainform);<br>&nbsp;&nbsp;Application.Run;<br>end.<br>===============================================================================================<br>主窗体代码:<br>unit&nbsp;UMdiform;<br>interface<br>uses<br>&nbsp;&nbsp;Windows,&nbsp;Messages,&nbsp;SysUtils,&nbsp;Variants,&nbsp;Classes,&nbsp;Graphics,&nbsp;Controls,&nbsp;Forms,<br>&nbsp;&nbsp;Dialogs,&nbsp;Udm,StdCtrls;<br>type<br><br>&nbsp;&nbsp;TMainform&nbsp;=&nbsp;class(TForm)<br>&nbsp;&nbsp;&nbsp;&nbsp;Button1:&nbsp;TButton;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;Button1Click(Sender:&nbsp;TObject);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;FormCreate(Sender:&nbsp;TObject);<br>&nbsp;&nbsp;private<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Private&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;public<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyHandle:HWND;<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Public&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;end;<br>var<br>&nbsp;&nbsp;Mainform:&nbsp;TMainform;<br>type<br>&nbsp;&nbsp;T_ShowTestMng=function&nbsp;(var&nbsp;adm:TMainform)&nbsp;:&nbsp;Boolean;&nbsp;StdCall;<br>implementation<br>{$R&nbsp;*.dfm}<br>procedure&nbsp;TMainform.Button1Click(Sender:&nbsp;TObject);<br>var&nbsp;<br>&nbsp;&nbsp;Lib_&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:THandle;<br>&nbsp;&nbsp;_ShowTestMng&nbsp;:T_ShowTestMng;<br>begin<br>&nbsp;&nbsp;Lib_:=LoadLibrary(pchar(&acute;MdiChild.dll&acute;));<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;@_ShowTestMng:=GetProcAddress(Lib_,&acute;_ShowTestMng&acute;);<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not(@_ShowTestMng=nil)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_ShowTestMng(Mainform);<br>&nbsp;&nbsp;finally<br>&nbsp;&nbsp;&nbsp;&nbsp;FreeLibrary(Lib_);<br>&nbsp;&nbsp;end;<br>end;<br>procedure&nbsp;TMainform.FormCreate(Sender:&nbsp;TObject);<br>begin<br>&nbsp;MyHandle:=Application.Handle;<br>end;<br>end.<br>==============================================================================================<br>子窗体DLL代码:<br>library&nbsp;MdiChild;<br>uses<br>&nbsp;&nbsp;ShareMem,<br>&nbsp;&nbsp;UMdiform,&nbsp;&nbsp;//此单元为父窗体单元,在顶目设置中我已经设置了搜索此单元在路径。<br>&nbsp;&nbsp;Forms,<br>&nbsp;&nbsp;SysUtils,<br>&nbsp;&nbsp;Classes,<br>&nbsp;&nbsp;UChild&nbsp;in&nbsp;&acute;UChild.pas&acute;&nbsp;{FrmChild};//FrmChild子窗体的FormStyle属性为FsMDIChild<br>{$R&nbsp;*.res}<br>function&nbsp;_ShowTestMng(var&nbsp;adm:TMainform)&nbsp;:&nbsp;Boolean;&nbsp;StdCall;<br>begin<br>&nbsp;&nbsp;result:=true;<br>&nbsp;&nbsp;Application.Handle:=adm.MyHandle;<br>&nbsp;&nbsp;Application.CreateForm(TFrmChild,FrmChild);&nbsp;&nbsp;&nbsp;//程序就出错在此:出错原因是:Cannot&nbsp;create&nbsp;form.&nbsp;No&nbsp;MDI&nbsp;Forms&nbsp;are&nbsp;currently&nbsp;active.<br>&nbsp;&nbsp;FrmChild.Show;<br>end;<br>exports<br>&nbsp;&nbsp;&nbsp;&nbsp;_ShowTestMng;<br>end.
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>C# 调用Delphi dll 实例代码</li><li>Delphi 用DLL实现插件的简单实例</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: delphi中一个值得大家来考虑的DLL问题