加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在delphi中创建/销毁虚拟类

发布时间:2020-12-15 09:47:02 所属栏目:大数据 来源:网络整理
导读:这是我在这里发表的第一篇文章,但我要感谢社区,因为我已经无数次地找到解决问题的方法来到这里并在一个已经回答的问题中找到解决方案. 话虽如此,我想谈谈这一点.我在Code Gear的Delphi 2007 IDE中工作.我还是刚开始在德尔福工作的新手,准确地说还不到3个月,
这是我在这里发表的第一篇文章,但我要感谢社区,因为我已经无数次地找到解决问题的方法来到这里并在一个已经回答的问题中找到解决方案.

话虽如此,我想谈谈这一点.我在Code Gear的Delphi 2007 IDE中工作.我还是刚开始在德尔福工作的新手,准确地说还不到3个月,所以请记住这一点,因为我可能会遗漏一些基本的东西.

首先,我想就问题提供一些背景知识.我正在编写一个调度实用程序,用于在特定时间执行任务.对于每个可用任务,有2个与该任务相关联的相关delphi帧.第一帧用于编辑特定于该任务的详细信息,第二帧用于在任务运行时显示运行时信息.

保留正在运行的任务列表,并在该实用程序的滚动框中,显示运行时信息的相应帧列表.在任务开始和结束时创建和销毁这些运行时帧.这让我想到了我的问题.

我使用虚拟类管理器来保存每个任务的可用显示和编辑框架列表,并根据需要动态创建它们.在运行期间,一切都运行正常,当应用程序实际关闭时,我看到了问题.

该程序在关闭时会抛出EAccessViolation异常.当我尝试使用IDE跟踪问题时,我的代码中实际上并不存在与问题相对应的行或操作.因此,它必须是在后台执行的一些清理功能的一部分.

我已经将它缩小到动态创建虚拟类帧的代码,因为当我将代码注释掉时它会很好地关闭.因此,这让我相信我没有执行与使用此类类创建相关的操作.

var
  tmpCCI: TComponentClassInfExt;
  tmpS: String;
  tc: TComponent;
  bf: TBaseactionedit;
...
begin
...
tc := tmpCCI.fComponentClass.Create(nil);
if tc is TBaseactionedit then
begin
  bf := TBaseActionEdit(tc);
  bf.name := tmpCCI.fComponentClass.classname+IntToStr(nameCount);
  bf.Visible := False;
  bf.parent := pnlActionEdit;
  bf.Align := alClient;
  bf.Visible := True;
end;
...

这是我如何使用虚拟类管理器创建框架的摘录.当我们不再需要FreeAndNil时,我可以释放它们.我已尽最大努力确保在应用程序关闭之前我已正确释放任何实例,但显然我遗漏了一些东西.

那么有没有人有任何想法从这里调试这样的东西?

附:再一次,我是新人,所以如果有任何我错过的,掩饰,或忘记添加,请告诉我.再次感谢您阅读我的帖子!

解决方法

可能是父在Destroy期间释放所有包含的控件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读