【发布时间】:2011-05-25 12:13:45
【问题描述】:
这是来自在 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)。感谢您的 cmets 和帮助。这个问题已经困扰了我一段时间了。
我也想知道它是否可能与 FastMM4 相关?会不会是提供虚假信息?在下面的一些代码中。 TOLEStream 通常是如何释放的?
f.SaveToStream(TOleStream.Create(DataStream));有没有办法在不使用 TFileStream 的情况下将数据发送到数据流?
嗨,雷米, 您可以在此处找到带有 fastmm 和问题过程的命名空间处理程序的工作演示项目:http://mode5.webs.com/namespace.7z 当项目加载时,单击按钮让命名空间处理程序加载文件。当你退出时,你应该得到 fastmm 错误。 亲切的问候,
【问题讨论】:
-
嗨,Mode,欢迎来到 StackOverflow。这是一个很好的问题,但如果我们知道释放它时会出现什么错误,这将有所帮助。您可以编辑您的问题并为我们复制您在此处输入的错误吗?谢谢。
-
FastMM 没有错。你到底想做什么?将文件加载到 IStream 中并对其进行处理?文件应该被修改还是你希望它是只读的?