DLL释放问题 !! 急啊,哪位大哥帮个忙吧! (200分)

  • 主题发起人 主题发起人 TMXYB
  • 开始时间 开始时间
T

TMXYB

Unregistered / Unconfirmed
GUEST, unregistred user!
几经周折,终于搞定了在DLL中动态调用数据查询窗口,但又有新的问题!DLL中的查询窗口关不了。
经调试是freelibrary();的问题,怪!
代码如下:
libhandle := loadlibrary('gzan_chax_dll.dll');
try
if libhandle = 0 then
raise exception.Create('对不起!查询的动态连接库文件‘gzan_chax_dll.dll’丢失,请重新安装该文件!');
@show_gzap_chax:= getprocaddress(libhandle,'show_gzap_chax');
if not (@show_gzap_chax= nil) then
show_gzap_chax(Application.Handle,Data_Module.Session)
else
raiselastwin32Error;
finally
showmessage('free the_library');
[red] freelibrary(libhandle);//通不过,信息:Access Violation at adress 0x053b0000,Read of address 0x053b0000[/red]
end;

请问是何故?
 
在窗口中先放一按钮,执行以下操作:
gzap_chax_Form.the_query.Open;
在过程中去掉以上语句:
begin
Application.handle:=Ahandle;
gzap_chax_Form:=Tgzap_chax_Form.create(Application);
try
gzap_chax_Form.the_query:=Tquery(DataSetHandle);
gzap_chax_Form.showmodal;
finally
gzap_chax_Form.free;
end;
end;
这样调试看看有没有问题。如果没问题再把上面那句放到窗口的
OnShow中去执行。
 
???????????
 
???????????
 
show_gzap_chax(Application.Handle,Data_Module.Session)
//application.mainform.handle 试一下
 
在dll的DllEnterPoint的DLL_PROCESS_DETACH里释放该窗口了吗?
 
谈谈show_gzap_chax是干什么的,是什么样的窗口,MODAL,MODALESS,FREELIBARY的时候
窗口先FREE 了吗?
 
估计是你的dll函数show_gzap_chax(Application.Handle,Data_Module.Session) 的问题,
调用dll,参数最好是整形,字符等,要是参数是数据集,很容易出事,
 
libhandle := loadlibrary('gzan_chax_dll.dll');
//看看是不是这个问题
if libhandle = 0 then
raise exception.Create('对不起!查询的动态连接库文件‘gzan_chax_dll.dll’丢失,请重新安装该文件!');
try
@show_gzap_chax:= getprocaddress(libhandle,'show_gzap_chax');
if not (@show_gzap_chax= nil) then
show_gzap_chax(Application.Handle,Data_Module.Session)
else
raiselastwin32Error;
finally
showmessage('free the_library');
freelibrary(libhandle);
end;
 
dll可谓windows的鸡肋,强烈建议使用动态加载bpl包技术代替dll,
 
TO ugvanxk:换成application.mainform.handle 也不行!
我的DLL单元如下:
[blue]procedure show_gzap_chax(Ahandle:Thandle;TempSessions:TSession);
var
ss1:TSession;
gzap_chax_Form:Tgzap_chax_Form;
begin
Application.handle:=Ahandle;
gzap_chax_Form:=Tgzap_chax_Form.Create(Application);
with gzap_chax_Form do
begin
try
ss1:= TSession.Create(nil);
ss1:=TempSessions;
the_query.SessionName:=ss1.SessionName;
the_query.DatabaseName:='xiayb';
the_query.Open;
showmodal;
finally
free;
ss1:=nil;
ss1.Free;
end;
end;
end;
[/blue]其中gzap_chax_Form 是一个一般的数据查询窗口。急问各位有何破解之招?
 
问题已经解决,经管没有得到最佳答案,但启发不少,谢谢丛兄弟的帮助,分就这么多,见谅。
 
怎么解决的??????谢谢回应!
 
后退
顶部