为什么在Delphi中添加Action会导致致命错误

时间:2010-07-31 20:29:20

标签: delphi fatal-error actionlist

我正在使用Delphi 2009.我的程序已经编译并运行正常。我使用动作列表并将它们内置到我的程序中 - 虽然我有一段时间没有改变它们。

所以今天我只是以正常的方式向我的ActionList添加一个新动作。没有做任何其他事情,我现在构建并运行我的程序,我得到以下错误:

[DCC致命错误] Userface.pas(1):F2092程序或单元'Userface'以递归方式自行使用。

我没有做任何改变任何使用条款的事情。我找不到我的Userface单元调用自身或调用另一个调用Userface的单元的任何实例。我将可能的递归调用放在Implementation部分中。

如果我退出Delphi而不保存,重建并运行它,它运行正常。如果我再次尝试向操作列表添加新操作,则会再次发生致命错误。

我无法弄清楚发生了什么。我很感激任何帮助,以弄清楚如何解决这个问题。


编辑:在Uwe的回答之后,我仔细检查以确保它仍在发生。果然,正如我在对Uwe的评论中所描述的那样,我再次这样做了。建成之后,又发生了一次。

...但是,在项目菜单下,我偶然错过了选择“Build”并选择了“Compile”。它汇编得很好。然后我尝试构建,现在构建正常。没有致命错误!对我来说,一切似乎都很好。

如果我尝试添加其他操作然后构建,则会再次出现错误。但是如果我编译,那么我可以成功构建它 - 所以至少我有一个解决方法。

这一定是某种故障。我不知道发生了什么。有人知道这是什么或为什么会发生这种情况吗?


跟进。正如马里安所说,它可能发生在其他情况下,其中一个发生在我身上。所以它可能与添加动作没有直接关系,我的问题要求。

尽管如此,对我来说这是一个相对罕见的事情,并且只会变成一个小麻烦。它可能已经在Delphi 2010中得到修复,我的最终解决方案是在我下次升级到Delphi 2011或12时,一旦他们添加了64位或多平台。

3 个答案:

答案 0 :(得分:2)

有时添加组件会自动更改uses子句。这可以由Delphi本身完成,也可以由ModelMaker CodeExplorer之类的第三方插件完成。您可以使用历史记录选项卡快速识别任何更改。

如果没有来源,我就可以说......

编辑:考虑到我建议检查项目的其他信息

  1. 循环依赖
  2. 搜索路径中某处具有相同名称的单位
  3. 对于循环依赖项,您可以使用ModelMakerTools中的免费Unit Dependency Analyzer。您可以在该页面底部找到下载链接。

答案 1 :(得分:2)

如果您完全确定编译正确的源代码(.dpr路径!)并且使用部分相同,则可能是Delphi可以在非常简单或未使用的情况下消除相互引用。

IOW也许编译器允许它通过,如果A和B互相导入,但其中一个不使用另一个的符号。一旦开始使用符号(因为先前通过选择操作可以访问死代码),它就会变成相互引用冲突。

答案 2 :(得分:1)

根据要求,我的评论作为答案。

不知道为什么会发生这种情况,但如果有任何安慰,我也看到它也会在其他情况下发生。在更改之后立即构建将失败,编译,然后构建将成功。

在这些情况下,有时也有帮助的是在编译/构建之前显式保存全部。

我想这可能与IDE中的计时和缓存有关。可能还涉及启用代码洞察,错误红线等的编译线程。