dll函数返回form的问题

亲密数 2003-08-16 12:34:49
我编写了一个dll函数,返回一个form类型。在onClose中action=caFree.我通过回调函数,在form的onDestroy事件中调用FreeLibrary,释放掉loadLibrary的handle.存在一个问题,就是这个form关闭的时候,调用他的主窗体也关闭掉了。脱离delphi独立运行没什么提示信息。在delphi中运行,在关闭时会出现access violation错误,希望高手指点,谢谢!希望周末能够把这个问题解决。
...全文
81 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
citytramper 2003-08-17
  • 打赏
  • 举报
回复
要不子窗体退出的时候给主窗体发个消息,让主窗体来处理
亲密数 2003-08-17
  • 打赏
  • 举报
回复
所有人我都会给分的,我想等一个比较满意的结果
huojiehai 2003-08-16
  • 打赏
  • 举报
回复
应该是
onDestroy事件中调用FreeLibrary出的错,FreeLibriary时会触发onDestroy事件,而你的onDestroy又调用FreeLibrary,这样好像进入一个怪圈。所以会出现地址非法访问!!
不能在onDestroy事件中调用FreeLibrary,应在合适的地方调用FreeLibrary,如主窗口关闭时
亲密数 2003-08-16
  • 打赏
  • 举报
回复
谢谢你。我试验了一下,freeLibrary放在FormClose里,不过还是不行。应该不是你说的问题吧。
onDestroy只是在form退出内存时触发的事件。FreeLibrary是释放掉LoadLibrary产生的那个整数。FreeLibrary会触发Form的OnDestroy事件吗?
亲密数 2003-08-16
  • 打赏
  • 举报
回复
我调用的dll中的窗体是一个mdi子窗体,要求是非模态窗口,所以在调用他的主窗体中比较难判断何时FreeLibrary,我现在是通过回调函数把他释放掉,可能是这里出了问题。
我后来去掉回调函数,现在子窗体退出的时候,主窗体就不会跟着退出了,但是这样问题也没有解决。一个是dll的handle不释放不好吧,现在在delphi中运行还是会提示错误。
citytramper 2003-08-16
  • 打赏
  • 举报
回复
不应该在dll中调用FreeLibrary吧,谁load的谁free
lw549 2003-08-16
  • 打赏
  • 举报
回复
楼主的做法容易导致exe和dll之间的资源使用关系发生紊乱,尤其是销毁对象的时候。
我的变通的方法是在dll中导出过程。
过程方式如下:
var
myFrm :TfrmAbout;
begin
try
myFrm := TfrmAbout.Create( nil );
myFrm.ShowModal;
except
...
end;
finally
myFrm.Free;
end;
end;
lw549 2003-08-16
  • 打赏
  • 举报
回复
脱离Delphi的时候运行没有问题是因为那个异常导致程序关闭,所以你不会看到。

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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