代码之家  ›  专栏  ›  技术社区  ›  lkessler

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

  •  1
  • lkessler  · 技术社区  · 15 年前

    我用的是Delphi2009。我的程序一直在编译和运行良好。我使用动作列表并将它们内置到我的程序中——尽管我已经有一段时间没有更改它们了。

    所以今天我要简单地添加一个新的动作到我的动作列表中,以正常的方式。在不做任何其他操作的情况下,我现在构建并运行我的程序,并出现以下错误:

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

    如果我退出Delphi而不保存、重建并运行它,它运行得很好。如果我再次尝试将新操作添加到操作列表中,致命错误将再次发生。

    我不知道发生了什么事。如果有人能帮我解决这个问题,我将不胜感激。


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

    ... 但是,在Project菜单下,我意外地错过了选择Build,而选择了Compile。很好。然后我试着构建,现在构建工作正常。没有致命错误!对我来说一切又好起来了。

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


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

    尽管如此,到目前为止,这对我来说还是比较少见的事情,只是变成了一个小麻烦。它可能已经在Delphi2010中修复了,我的最终解决方案将是在我下次升级到Delphi2011或12时添加64位或多平台。

    3 回复  |  直到 15 年前
        1
  •  1
  •   Marjan Venema    15 年前

    根据我的要求,我的意见作为答复。

    我不知道为什么会这样,但如果有什么安慰的话,我在其他情况下也看到过。紧接着更改的构建将失败,编译,然后构建将成功。

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

        2
  •  2
  •   Marco van de Voort    15 年前

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

        3
  •  2
  •   Uwe Raabe    15 年前

    没有消息来源我就不能说。。。

    编辑:考虑到你的额外信息,我建议检查该项目

    1. 在搜索路径中某处具有相同名称的单位

    对于循环依赖项,可以使用 Unit Dependency Analyzer 来自ModelMakerTools。您可以在该页底部找到下载链接。