[英]Using FastMM4 and Indy 10
這與IndyRegisterExpectedMemoryLeak()
函數和FastMM4有關。
在IdCompilerDefines.inc
在System
文件夾中,我定義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);
首先,如果對IdCompilerDefines.inc
進行了更改,則必須對System
, Core
和Protocols
文件夾中的IdCompilerDefines.inc
所有三個副本進行相同的更改(之所以要復制三個副本,原因與FreePascal的較早版本阻止了Indy在其各個軟件包之間共享一個IdCompilerDefines.inc
。
其次,FastMM4被並入Delphi 2006的RTL中,該版本與引入System.RegisterExpectedMemoryLeak()
函數的版本相同。 您不應在2006年及更高版本中定義USE_FASTMM4
。 讓Indy使用System.RegisterExpectedMemoryLeak()
以便它可以委派給運行時實際使用的任何內存管理器。 在早期版本中,可以通過定義USE_FASTMM4
來安裝完整版本的FastMM4並重新編譯Indy以使用它。 即使這樣,當USE_FASTMM4
時,也不應在FastMM4.RegisterExpectedMemoryLeak()
行上出現錯誤,因為僅在定義USE_FASTMM4
時才編譯該行。
第三,您所顯示的錯誤消息均與FastMM4或USE_FASTMM4
定義USE_FASTMM4
。 提到IIdTextEncoding
的事實告訴我您正在使用Indy 10.6.0 SVN修訂版4990或更高版本(在撰寫本文時,當前的SVN修訂版是5302),但是自該發行版以來,沒有任何與FastMM相關的更改。 。 因此,必須采取其他措施來導致那些與FastMM4不相關的錯誤。
報告問題之前,請始終確保使用絕對最新版本。 如果最新版本中有錯誤,則可以修復。 如果早期版本中存在錯誤,則可能已在更高版本中修復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.