这是来自在 Delphi 中完成的自定义命名空间处理程序,我用来将文件加载到 webbrowser 组件中。
数据流:IStream; 变量 F:TFileStream; 假人:INT64; 开始 F:=TFileStream.Create(strfilename fmOpenRead); CreateStreamOnHGlobal(0, True, DataStream); TOleStream.Create(DataStream).CopyFrom(F, F.Size); DataStream.Seek(0, STREAM_SEEK_SET, Dummy); TotalSize := F.Size; F.免费; 结尾;
问题是 Fastmm4 在程序结束时会出现内存泄漏错误,并说 TOleStream 没有被释放。我如何释放它?如果我将 TOleStream 放在一个变量中并像这样分配
变量 服务条款:TOleStream; TOS:=TOleStream.Create(DataStream) TOS.CopyFrom(F, F.Size); .. TOS.免费; 结尾;
最后,当我释放 TOS 变量时,我得到一个错误(EAccessViolation 指向 ComObj 中的 TComObject.ObjRelease)。我会很感激你的意见和帮助。这个问题已经困扰我一段时间了。
我也想知道它是否可能与 FastMM4 相关?会不会是提供虚假信息?在下面的一些代码中。TOLEStream 通常是如何释放的?
f.SaveToStream(TOleStream.Create(DataStream));
有没有办法在不使用 TFileStream 的情况下将数据发送到数据流?
嗨 Remy,您可以在此处找到带有 fastmm 和问题过程的命名空间处理程序的工作演示项目:http://mode5.webs.com/namespace.7z当 项目加载时,单击按钮以加载命名空间处理程序文件。当你退出时,你应该得到 fastmm 错误。亲切的问候,