使用FastMM4和Indy 10

时间:2015-09-03 14:35:37

标签: delphi indy10

这与IndyRegisterExpectedMemoryLeak()函数和FastMM4。

有关

IdCompilerDefines.inc文件夹的System中,我定义USE_FASTMM4IdGlobal.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);

1 个答案:

答案 0 :(得分:4)

首先,如果您对IdCompilerDefines.inc进行了更改,则必须在IdCompilerDefines.incSystem和{Core的{​​{1}}的所有三个副本中进行相同的更改{1}}文件夹(有三个副本的原因与早期版本的FreePascal中的技术问题有关,导致Indy无法在其各种软件包中共享单个Protocols

其次,FastMM4被整合到Delphi 2006的RTL中,这与引入IdCompilerDefines.inc函数的版本相同。您不应该在2006及更高版本中定义System.RegisterExpectedMemoryLeak()。让Indy使用USE_FASTMM4,这样它就可以委托给运行时实际使用的内存管理器。在早期版本中,您可以安装FastMM4的完整版本并重新编译Indy以通过定义System.RegisterExpectedMemoryLeak()来使用它。即使这样,当USE_FASTMM4未定义时,也不应该在FastMM4.RegisterExpectedMemoryLeak()行上出错,因为只有在定义USE_FASTMM4时才编译该行。

第三,您所显示的错误消息均未以任何方式与FastMM4或USE_FASTMM4定义相关。提到USE_FASTMM4这一事实告诉我您正在使用Indy 10.6.0 SVN修订版4990或更高版本(撰写本文时当前的SVN版本是5302),但是没有任何与FastMM相关的更改从那个版本开始之前。因此,必须要有其他事情来导致那些与FastMM4无关的错误。

在报告问题之前,请务必确保使用绝对最新版本。如果最新版本中存在错误,则可以修复。如果早期版本中存在错误,则可能已在以后的版本中修复了该错误。