一个简单的DLL问题!(100分)

  • 主题发起人 主题发起人 jericho3164
  • 开始时间 开始时间
J

jericho3164

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个窗体上放置了很多的控件,现在我想把这个窗体加入到一个DLL文件中,然后在一个应用程序中调用这个窗体,怎么做?程序中调入窗体时,那个窗体的初始化能不能在设计阶段设置好?还是必须在代码中实现?<br>procedure TMainForm.N1Click(Sender: TObject);<br>begin<br>&nbsp;//我想在这里写调出那个窗体的代码!<br>end;
 
给你一个完整的解决方法:<br><br>1、你写的函数应该放在窗体里,这样可以保证窗体的独立性,没有必要放在工程文件中,<br>只要在工程文件中exports这个函数就行了;<br>2、改写一下你的函数,至少应该有一个try..finally,这样比较可靠一些;<br>例如:<br>&nbsp; function showes(AHandle:THandle):integer;stdcall;<br>&nbsp; var<br>&nbsp; &nbsp; form:TForm1;<br>&nbsp; begin<br>&nbsp; &nbsp; Application.Handle := AHandle;//去掉状态栏上的窗体图标<br>&nbsp; &nbsp; form:=tform1.Create (appliction);<br>&nbsp; &nbsp; try<br>&nbsp; &nbsp; &nbsp; result:=form.ShowModal ;<br>&nbsp; &nbsp; finally<br>&nbsp; &nbsp; &nbsp;form.free;<br>&nbsp; &nbsp;end;<br>&nbsp; end;<br>&nbsp; 函数调用方法:showes(appliction.Handle);<br>3、DLL中的窗体和普通窗体没什么区别,但在调用时会在windows的状态栏上多出<br>一个程序图标,想去掉它,还需要做些小工作,上面的例子代码已经做了处理,有<br>注释。这样做还有一个好处,就是DLL中窗体的图标也变成应用程序的图标了:)<br>
 
我有一个将Form储存于DLL并调用的示例程序,需要的话请来信说明!coolqiang@163.net
 
to 原野飞侠 您能详细的说一下关于调用时的例子吗?
 
现成例子我有一个<br><br>library Project1;<br><br>uses<br>&nbsp; SysUtils,<br>&nbsp; Forms,<br>&nbsp; Classes,<br>&nbsp; Unit1 in 'Unit1.pas' {Form1};<br><br>{$R *.res}<br>procedure Showme(AHandle:THandle);stdcall;<br>begin<br>&nbsp; Application.Handle:=AHandle;//此处的参数是你调用此DLL的Application的handle为的是保持线程的同步<br>&nbsp; Form1:=TForm1.Create(Application);<br>&nbsp; Try<br>&nbsp; &nbsp; Form1.ShowModal;<br>&nbsp; finally<br>&nbsp; &nbsp; Form1.free;<br>&nbsp; &nbsp; Form1:=nil;<br>&nbsp; end;<br>end;<br>exports<br>&nbsp; showme;<br>begin<br>end.<br><br><br>调用此DLL的程序的部分代码<br><br>procedure showme(AHandle:THandle);stdcall;external 'Project1.dll';<br><br><br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>&nbsp;showme(Application.Handle);<br>end;<br><br><br>{注意调用函数名的大小写}<br><br>
 
to fishwater_2240 按照您的办法,可是出现:<br>无法定位showme于动态连接库project1.dll上!怎么回事?
 
希望你先去学习一下DLL的高级内容,否则就写不好这个东西。<br>
 
DLL的高级内容有哪些请指点,不才也正在看!
 
多人接受答案了。
 
后退
顶部