2015-09-08 50 views
0

在编制2007年德尔福项目,我收到以下错误:如何包括Vcl.ImgList在Delphi

E203: Undeclared identifier: TChangeLink

这似乎属于Vcl > ImgList库。

我有限的理解是Vcl是原生Delphi库的一部分。我如何验证它是否被正确引用?

+1

如果你正在编译的是Delphi代码,你在uses子句中缺少'ImgList'。 。 –

+0

使用包含此行:'Clipbrd {$ IFDEF DELPHI4},ImgList {$ ENDIF},dxCommon {$ IFDEF DELPHI6},变量{$ ENDIF}'。有条件的ImgList克服了这个问题,谢谢!随意将其发布为答案 –

回答

1

这是因为ImgList不在您的使用条款。根据信息,您在评论规定,

uses contains this line:

Clipbrd{$IFDEF DELPHI4}, ImgList {$ENDIF}, dxCommon{$IFDEF DELPHI6}, Variants{$ENDIF} 

这是因为{$IFDEF DELPHI4}被排除了,大概是因为DELPHI4没有定义。这通常是由使用开源或商业组件集中的代码引起的,这些组件使用那些版本定义来支持具有相同源的多个Delphi版本。 (这通常是在一个.INC文件某种完成;绝地使用JEDI.INC,例如,对所有的版本定义了各种编译器和IDE相关的差异)

最好的解决方案(以维持跨版本兼容性)将更新的定义包括德尔福2007年,但我不能提供建议如何这样做,因为我不知道定义的位置。另一种替代方法是从uses子句中删除{$IFDEF DELPHI4},如果您不需要担心早期版本的IDE /编译器。

+1

像DELPHI4这样的有条件命名可能仅由Delphi 4定义(由第三方'.inc'),而不适用于Delphi 4及更高版本。通常情况下,第三方库供应商将为DELPHI4ANDHIGHER或DELPHI4ORLATER或类似的更新版本定义条件,那么'uses'子句可能会像:'uses ... {$ IFDEF DELPHI4ORLATER},ImgList {$ ENDIF} ...;'。当然,这是在Delphi 6引入'{$ IF}'和'RTLVersion'之前,你应该使用它。 –

+0

@Remy:我知道一个在其产品中使用了“{$ IFDEF VERxxx} {$ DEFINE DELPHIx}”的商业库,并且每一个新版本的编译器都会对其进行扩展(偶尔会很糟糕)。我不知道代码中的定义来自哪里,但是由于ImgList是在D4中引入的,至少在D2007中依然存在(根据文档),我怀疑是这种情况。 –

+1

很多图书馆仍然使用这种方法(例如,Indy确实有实验性代码,最终将Indy从该模型中移除)。 –