使用 FastMM4 时如何从代码中检测到

How can I detect from code when FastMM4 is used

我想在使用 FastMM4 时在表单上显示一个标签(在项目文件中 'Uses'),这样我就不会错误地将可执行文件提供给不使用 FastMM4 的人已安装 FastMM_FullDebugMode.dll

我试过这些,但没有效果:

{$ifdef FullDebugMode}
LblFastMM4.Visible := true;
{$endif}

{$ifdef EnableMemoryLeakReporting}
LblFastMM4.Visible := true;
{$endif}

如何在运行时检测 FastMM4?

注意:我 'officially' 不使用 FastMM4 分发应用程序。当我想将 alpha 版本提供给非技术用户快速查看时,这只是对自己的提醒。如果他们随后遇到错误,那就很烦人了。

您的 {$ifdef} 不起作用,因为您自己的代码未直接包含 FastMM4Options.inc,因此 FastMM 的条件未在您的代码范围内定义。它们仅在 FastMM 代码的范围内定义。您无法测试 {$define} 在其他人的单元中的条件。

但是,您可以使用 {$If Declared(...)} 检查范围内的 public 符号是否使用了另一个单元。在这种情况下,FastMM4.pasinterface 部分在某些条件下声明各种符号,例如 TRegisteredMemoryLeakEnableMemoryLeakReporting 定义时, DebugGetMemFullDebugMode 定义等

{$if declared(DebugGetMem)}
LblFastMM4.Visible := true;
{$endif}

{$if declared(TRegisteredMemoryLeak)}
LblFastMM4.Visible := true;
{$endif}

试试这个: LblFastMM4.Visible := InitializationCodeHasRun;

FastMM 可以配置很多选项。在您的情况下,选项 DoNotInstallIfDLLMissing 可能很有价值。一个不错的应用程序可用于设置选项:https://jedqc.blogspot.com/2007/07/new-fastmm4-options-interface.html