2013-03-22 54 views
1

我在Delphi 2007中编写了一个designtime包。编译器伪造的“Undeclared Identifier”错误?

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

当您在找到声明时,IDE没有问题CTRL +单击其他单元的类型名称。将鼠标悬停在类型名称上会显示其声明的单位及其参数。即使通常craptastic和偏执Error Insight功能的IDE没有看到问题。只有编译器才会抱怨。

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

以前有没有其他人看到过这种行为,有没有解决办法?

+0

您是否真的将新单元包含在您的项目中? – 2013-03-22 17:05:39

+0

是的。它在dpk中并在项目经理中显示。我甚至检查过dproj文件,并且有一个DCCReference。它与使用它的所有其他单元文件位于同一文件夹中。 – 2013-03-22 17:08:03

+1

我们如何重现这一点,以便我们知道我们正在运行与您相同的代码? – 2013-03-22 17:42:01

回答

4

我已经尝试了所有的常识建议,如确保文件在项目和其他单位的使用条款。

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

  • 关闭该项目,并重新启动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包,没有意识到它是错误的来源。

+0

+1更新答案。感谢分享! – NGLN 2013-09-17 19:15:39