我编写了一个dll函数,返回一个form类型。在onClose中action=caFree.我通过回调函数,在form的onDestroy事件中调用FreeLibrary,释放掉loadLibrary的handle.存在一个问题,就是这个form关闭的时候,调用他的主窗体也关闭掉了。脱离delphi独立运行没什么提示信息。在delphi中运行,在关闭时会出现access violation错误,希望高手指点,谢谢!希望周末能够把这个问题解决。
调试欢乐多
onDestroy事件中调用FreeLibrary出的错,FreeLibriary时会触发onDestroy事件,而你的onDestroy又调用FreeLibrary,这样好像进入一个怪圈。所以会出现地址非法访问!!
不能在onDestroy事件中调用FreeLibrary,应在合适的地方调用FreeLibrary,如主窗口关闭时
onDestroy只是在form退出内存时触发的事件。FreeLibrary是释放掉LoadLibrary产生的那个整数。FreeLibrary会触发Form的OnDestroy事件吗?
我的变通的方法是在dll中导出过程。
过程方式如下:
var
myFrm :TfrmAbout;
begin
try
myFrm := TfrmAbout.Create( nil );
myFrm.ShowModal;
except
...
end;
finally
myFrm.Free;
end;
end;
我后来去掉回调函数,现在子窗体退出的时候,主窗体就不会跟着退出了,但是这样问题也没有解决。一个是dll的handle不释放不好吧,现在在delphi中运行还是会提示错误。