我正在Delphi 2007中编写一个设计时包。
我决定将一些事件类型声明移动到他们自己的Events
单元中,以便它们可以在多个单元中使用。当我这样做时,编译器开始在最初声明这些事件的单元中抱怨Undeclared identifier: 'Event Name'
。类型声明都在interface
单元的Events
部分中,我已将Events
单元添加到其他单元的uses子句中,但它与编译器完全忽略Events
1}}单位。
当您 CTRL +单击其他单位的类型名称时,IDE可以轻松找到声明。将鼠标悬停在类型名称上会显示其声明的单位及其参数。即使IDE的通常的craptastic和偏执 Error Insight 功能也没有出现问题。只有编译器抱怨它。
我尝试在另一个更简单的软件包项目中重现此问题,试图将其隔离但我无法重现它。
之前有没有其他人看过这种行为并且有解决方法吗?
答案 0 :(得分:4)
我已经尝试了所有常识建议,例如确保文件位于项目中以及其他单位的uses子句中。
由于没有人发布解决方案,我尝试了Ken White's和Wouter van Nifterick's。
唯一有效的方法,我不知道为什么,将Events.pas重命名为其他内容。我使用项目管理器重命名它并重新编译。所有Undeclared Identifier
错误都消失了。我将其重命名为Events
,错误又回来了。谁知道?
出于好奇,我对我系统上的每个pas和inc文件进行了文本搜索,看看Events
是否被用作某个地方的标识符(我知道它应该没有区别但是... ya从来不知道)。没有。没有名为Events
的变量,类型或函数。
作为一个完整性检查,我创建了一个包含少量单元的简单项目,其中一个单元称为Events
,带有一些类型声明。所有其他单位都将其包含在其使用条款中。编译器在解析类型标识符时没有遇到任何问题。我完全不知道为什么它在我的另一个项目的Events
单位上窒息了。
<强>更新强>
我终于明白了为什么我收到这个错误。我写的包使用了开放工具api(OTA),所以它需要DesignIDE
包。 DesignIDE
仅作为预编译的dcp和bpl提供,因此除了作为IDE的扩展点公开的少数接口单元之外,所有内容都缺少源。事实证明,编译成DesignIDE
的隐藏单位之一被称为Events
。直到我将我的包迁移到更高版本的Delphi并开始获得E2200 Package 'designide' already contains unit 'Events'
之前,我才发现这一点。此错误消息未出现在Delphi 2007中。
我试图在一个更简单的包中隔离问题无法重现它,因为我已经从它的依赖项中排除了DesignIDE
包,没有意识到它是错误的来源。