使用DLL函数调用窗体的问题

woshizhaoxuhui 2008-01-01 05:10:56
将调用窗体的语句写成DLL中的一个函数来调用时出现内存错误,麻烦大家看看是什么问题?

DLL中的函数:

procedure OpenForm(frm:TForm);
begin
try
frm := TForm.Create(Application);
frm.ShowModal;
finally
frm.Free;
end;
end;

主程序中的调用语句:
implementation
uses SelectTYPJ_frm;
procedure OpenForm(frm:TForm);stdcall;external 'pub.dll'

procedure TfrmInputPJ.grdT0103KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin

OpenForm(frmSelectTYPJ);

end;
...全文
130 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxsan 2008-01-03
  • 打赏
  • 举报
回复
DLL中的函数:
TFormClass = class of Tform;

procedure OpenForm(frm:TFormClass );
begin
with frm.Create(Application) do
begin
ShowModal;
end;
end;

主程序中的调用语句:
implementation
uses SelectTYPJ_frm;
procedure OpenForm(frm:TFormClass );stdcall;external 'pub.dll'

procedure TfrmInputPJ.grdT0103KeyDown(Sender:TObject; var Key:Word; Shift: TShiftState);
begin

OpenForm(TfrmSelectTYPJ);

end;

这样可以的,如果有问题,留言!
yagzh 2008-01-02
  • 打赏
  • 举报
回复
动态库单元要引用窗体单元,调用这个单元的窗体要把Application.handle传给被调用的动态库窗体
woshizhaoxuhui 2008-01-01
  • 打赏
  • 举报
回复
将DLL函数修改为如下:
procedure OpenForm(frm:TForm);
begin
try
frm := Tfrm.Create(nil);//此处出错,说Tfrm没有定义,这是为什么呢?
frm.ShowModal;
finally
frm.Free;
end;
end;

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧