gpt4 book ai didi

delphi - delphi中的虚拟类创建/销毁

转载 作者:行者123 更新时间:2023-12-03 15:13:41 30 4
gpt4 key购买 nike

这是我在这里发表的第一篇文章,但我想对社区表示感谢,因为通过来到这里并在已经得到解答的问题中找到解决方案,我已经无数次找到了问题的解决方案。

话虽这么说,我想进入正题。我正在 Code Gear 的 Delphi 2007 IDE 中工作。我对 delphi 工作还很陌生,准确地说还不到 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 释放它们。我已尽最大努力确保在应用程序关闭之前正确释放了所有实例,但显然我遗漏了一些东西。

那么有人知道从这里到哪里调试这样的东西吗?

附注再说一遍,我是新人,所以如果我遗漏、掩盖或忘记添加任何内容,请告诉我。再次感谢您阅读我的帖子!

最佳答案

可能是父级在销毁期间释放了所有包含的控件。

关于delphi - delphi中的虚拟类创建/销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8010592/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com