2015-09-08 48 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從該模型中移除)。 –