1

我正在 Delphi 2007 中编写设计时包。

我决定将一些事件类型声明移到它们自己的Events单元中,以便它们可以在多个单元中使用。当我这样做时,编译器开始Undeclared identifier: 'Event Name'在最初声明这些事件的单元中抱怨。类型声明都在单元的interface部分中Events,我已将该Events单元添加到其他单元的使用子句中,但它就像编译器完全忽略了该Events单元。

当您CTRL+ 单击另一个单元的类型名称时,IDE 可以轻松找到声明。将鼠标悬停在类型名称上会显示其声明的单元及其参数。即使 IDE 的通常疯狂和偏执的错误洞察功能也没有发现问题。只有编译器抱怨它。

我尝试在另一个更简单的包项目中重现此问题以尝试隔离它,但我无法重现它。

以前有没有其他人见过这种行为,是否有解决方法?

4

1 回答 1

4

我已经尝试了所有常识性建议,例如确保文件在项目中以及在其他单元的使用条款中。

由于没有人发布解决方案,我尝试了Ken WhiteWouter van Nifterick 的建议。

  • 关闭项目并重新启动 IDE - 没有变化
  • 在我系统上的每个驱动器中搜索 Events.pas 或 Events.dcu - 我的项目中只有一个。

唯一有效的,我不知道为什么,就是将 Events.pas 重命名为别的东西。我使用项目管理器重命名它并重新编译。所有的Undeclared Identifier错误都消失了。我将其重命名为Events,错误又回来了。谁知道?

出于好奇,我对系统上的每个 pas 和 inc 文件进行了文本搜索,以查看是否Events在某处用作标识符(我知道它不应该有所作为,但......你永远不知道)。没有。没有调用变量、类型或函数Events

作为一个健全的检查,我创建了一个包含几个单元的简单项目,其中一个是Events用几个类型声明调用的。所有其他单位都将其包含在其使用条款中。编译器解析类型标识符没有问题。我完全不知道为什么它Events在我的另一个项目中卡住了。

更新

我终于弄清楚了为什么我会收到这个错误。我正在编写的软件包使用了开放工具 api(OTA),因此它需要该DesignIDE软件包。DesignIDE仅作为预编译的 dcp 和 bpl 提供,因此除了作为 IDE 的扩展点公开的少数接口单元之外,所有内容都缺少源。原来编译成的隐藏DesignIDE单元之一叫做Events. 直到我将包迁移到更高版本的 Delphi 并开始获取E2200 Package 'designide' already contains unit 'Events'. 此错误消息未出现在 Delphi 2007 中。

我试图在更简单的包中隔离问题无法重现它,因为我已将DesignIDE包从它的依赖项中排除,没有意识到它是错误的根源。

于 2013-03-22T18:25:24.133 回答