首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FastMM4和Indy10

使用FastMM4和Indy10
EN

Stack Overflow用户
提问于 2015-09-03 22:35:37
回答 1查看 202关注 0票数 2

这与IndyRegisterExpectedMemoryLeak()函数和FastMM4有关。

System文件夹的IdCompilerDefines.inc中,我定义了USE_FASTMM4IdGlobal.pas的编译器错误如下:

代码语言:javascript
复制
[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没有在这一行中定义:

代码语言:javascript
复制
Result := FastMM4.RegisterExpectedMemoryLeak(AAddress);
EN

回答 1

Stack Overflow用户

发布于 2015-09-04 04:24:33

首先,如果你更改了IdCompilerDefines.inc,你必须在IdCompilerDefines.inc的所有三个副本中进行相同的更改-在SystemCoreProtocols文件夹中(有三个副本的原因与早期版本的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,可以修复。如果在较早的版本中存在错误,则可能已在较高版本中修复。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32378605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档