这与IndyRegisterExpectedMemoryLeak()函数和FastMM4有关。
在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);发布于 2015-09-04 04:24:33
首先,如果你更改了IdCompilerDefines.inc,你必须在IdCompilerDefines.inc的所有三个副本中进行相同的更改-在System,Core和Protocols文件夹中(有三个副本的原因与早期版本的FreePascal中的一个技术问题有关,该问题阻止了Indy在其不同的包之间共享单个IdCompilerDefines.inc )。
其次,在Delphi2006中将FastMM4合并到RTL中,这与引入System.RegisterExpectedMemoryLeak()函数的版本相同。您不应该在2006及更高版本中定义USE_FASTMM4。让Indy使用System.RegisterExpectedMemoryLeak(),这样它就可以委托给运行时实际使用的任何内存管理器。在早期版本中,您可以安装完整版的FastMM4,并通过定义USE_FASTMM4重新编译Indy以使用它。即使这样,在没有定义USE_FASTMM4时,您也不应该在FastMM4.RegisterExpectedMemoryLeak()行上得到错误,因为只有在定义了USE_FASTMM4时才会编译该行。
第三,您所显示的错误消息中没有一条与FastMM4或USE_FASTMM4定义有关。提到IIdTextEncoding的事实告诉我,您使用的是Indy10.6.0SVN版本4990或更高版本(在撰写本文时,当前的SVN版本是5302),但是在该版本发布之前就没有任何与FastMM相关的更改。因此,一定是其他原因导致了这些错误,与FastMM4无关。
在报告问题之前,请始终确保您使用的是绝对最新版本。如果最新版本中有bug,可以修复。如果在较早的版本中存在错误,则可能已在较高版本中修复。
https://stackoverflow.com/questions/32378605
复制相似问题