2015-09-03 111 views
2

這與IndyRegisterExpectedMemoryLeak()函數和FastMM4有關。使用FastMM4和Indy 10

System文件夾IdCompilerDefines.inc,我定義USE_FASTMM4,是IdGlobal.pas編譯器錯誤如下:

[Error]IdGlobal.pas[2203] Declaration of 'GetBytes' defers from declaration in interface 'IIdTextEncoding' 
[Error]IdGlobal.pas[2203] Declaration of 'GetCharCount' defers from declaration in interface 'IIdTextEncoding' 
[Error]IdGlobal.pas[2203] Declaration of 'GetChars' defers from declaration in interface 'IIdTextEncoding' 

等。

如果我不定義USE_FASTMM4,然後它告訴我,FastMM4未在此行中定義:

Result := FastMM4.RegisterExpectedMemoryLeak(AAddress); 
+2

您可能需要對您正在使用的Indy版本非常具體。你是否從回購中獲得最新版本? –

回答

4

首先,如果你進行了更改IdCompilerDefines.inc,你必須做出同樣的變化IdCompilerDefines.inc的所有三個副本 - System,CoreProtocols文件夾(原因有三個副本與早期版本的FreePascal中的技術問題相關,這些問題阻止Indy在其各個包中共享一個IdCompilerDefines.inc)。其次,FastMM4被納入Delphi 2006中的RTL中,該版本與介紹System.RegisterExpectedMemoryLeak()函數的版本相同。您不應該在2006年和更高版本中定義USE_FASTMM4。讓Indy使用System.RegisterExpectedMemoryLeak(),以便它可以委託給在運行時實際使用的任何內存管理器。在早期版本中,您可以安裝完整版本的FastMM4,並通過定義USE_FASTMM4來重新編譯Indy以使用它。即使這樣,當USE_FASTMM4未定義時,FastMM4.RegisterExpectedMemoryLeak()行上也不會出現錯誤,因爲該行僅在定義了USE_FASTMM4時編譯。

第三,您所顯示的錯誤消息中沒有一個與FastMM4或USE_FASTMM4有任何關係。提及IIdTextEncoding這一事實告訴我,您正在使用Indy 10.6.0 SVN修訂版4990或更高版本(撰寫本文時當前的SVN修訂版爲5302),但自該版本發佈之前,沒有任何與FastMM相關的更改。因此,其他事情必須繼續引發與FastMM4無關的錯誤。

在報告問題之前,務必確保您使用的是絕對最新版本。如果最新版本中存在錯誤,則可以修復。如果在早期版本中存在錯誤,則可能已在稍後的修訂中修復。

+0

謝謝雷米。我正在使用Indy10_5031。我會檢查你的建議。 –