这是我在这里的第一篇文章,但我想对社区说声谢谢,因为通过来到这里并在已经回答的问题中找到解决方案,我无数次找到了解决问题的方法。
话虽如此,我想切入正题。我在 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 释放实例。我已经尽我所能确保在应用程序关闭之前我已经正确释放了任何实例,但显然我遗漏了一些东西。
那么有没有人有任何想法从这里调试这样的东西?
PS再次,我是新人,所以如果有任何我遗漏、掩饰或忘记添加的内容,请告诉我。再次感谢您阅读我的帖子!