如何在Delphi 6包中使用FastMM4?

7

我一直在我的Delphi 6 Pro应用程序中顺利使用FastMM4版本4.92。现在,我想在我创建的一个包(BPL)中使用它。我尝试将这些单元放在Contains部分,然后将它们移动到列表的顶部,但我仍然会收到来自FastMM4的错误提示,指出它不是第一个要初始化的单元。为了解决这个问题,我想把FastMM4放在Requires部分,但我无法找到任何FastMM4的DCP文件(运行时库)。有人知道如何解决吗?


内存管理器是整个应用程序的全局变量。您不能仅在一个BPL中可选地使用它。要么在整个应用程序中使用它,要么根本不使用它。但是,您可以将内存管理器的代码放置在exe或bpl中。 - Alex
@Alexander:还是干脆不用它?也许你的意思是不使用自定义内存管理器,而是使用默认的内存管理器... 据我所知,没有办法不使用内存管理器。 - jachguate
@Robert:你能给我提供一些关于如何将FastMM集成到Delphi 6应用程序中的指针吗?我无法看到内存泄漏日志文件。谢谢。 - Abhineet
2个回答

4

可能您遇到这个错误的原因是,您应该将FastMM4单元包含在测试(使用)新创建的包所在的项目中,而不是包中。当然,在“uses”部分中应该放在第一位。


做这个还不够。如果你想让使用运行时包的应用程序使用 FastMM,你必须构建 fastMM 共享组件 (fastmm.dll 和/或 fastmm_fulldebugmode.dll),并使用修改后的 borlandmm.dll。 - Warren P

3

您是否在FastMM4Options.inc文件中设置了UseRuntimePackages?否则,您可以尝试使用ShareMem和随FastMM一起提供的BorlndMM.dll替换。虽然ShareMem是为DLL设计的,但它的使用应该将所有内存管理例程路由到BorlndMM.dll中的例程,使标准包和您的包都可以使用FastMM代码。


我认为你的答案可能比我的更准确。 - Warren P
我在我的项目中没有使用运行时包。那么,静态包中驻留的单元是否会通过FastMM4?我认为它们不会,所以我正在尝试将FastMM4强制用于我的包(DPK)。我的假设是错误的吗? - Robert Oschler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接