带窗体Dll问题(50分)

  • 主题发起人 主题发起人 popi
  • 开始时间 开始时间
P

popi

Unregistered / Unconfirmed
GUEST, unregistred user!
在Dll中调用一个窗体MainFrm
procedure SetOperaCondition;export;
begin
MainFrm:=TMainFrm.Create(Application);
MainFrm.ShowModal;
MainFrm.Free;
end;
当在另外的程序中静态调用此DLL时正常,但关闭此程序时,报内存无法读取的错误,已确定是DLL问题,但不知道错在哪?
 
我想你是把DLL中的Application变量用其它程序的APplication变量组重新赋值了,这样做是会出现问题的。因此你不能在进入DLL的时候就把它的Application变量组重新赋值,在退出的时候恢复。你可以在你的函数中给这个变量重新赋值,在退出函数的时候恢复或是想其它的办法
 
我没有直接赋值啊,唯一初始化传的值:
procedure InitDll(A_ADOConnection:TADOConnection);export;
begin
G_ADOConnection:=A_ADOConnection;
G_qryTemp:=TADOQuery.Create(Application);
G_qryTemp.Connection:=G_ADOConnection;
end;
//带G 开头的为DLL中的全局变量
这应该没错吧?
 
改成这样
procedure SetOperaCondition;export;
begin
MainFrm:=TMainFrm.Create(nil)
//这里一定用nil,因为此Application非彼Application了
MainFrm.ShowModal;
MainFrm.Free;
end;
 
尝试改为nil,还是同样错误:(
 
你的 Dll中是否还有其他的application相关的操作?
另外一定把你的form设为非自动创建才行.
 
>>Create(Application);
改为Create(Forms.Application)
试一试
 
你应该将外部的Application变量传进来赋值给一个全局的变量,然后再创建控件、窗体等地方使用该变量,比如G_qryTemp:=TADOQuery.Create(G_Application);
 
谢谢,确实还有一个application,找到了,已经解决:)
 
后退
顶部