这是来自 Delphi 中的自定义命名空间处理程序,我用它来将文件加载到 Web 浏览器组件中。
Datastream:IStream; var F: TFileStream; Dummy: INT64; begin 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.Free; end;
问题是Fastmm4在程序结束时给出内存泄漏错误,并说TOleStream没有被释放。我如何释放它?如果我将 TOleStream 放入变量中并像这样分配
var TOS:TOleStream; TOS:=TOleStream.Create(DataStream) TOS.CopyFrom(F, F.Size); .. TOS.Free; End;
最后,当我释放 TOS 变量时,出现错误(EAccessViolation 指向 ComObj 中的 TComObject.ObjRelease)。我将感谢您的意见和帮助。这个问题已经困扰我一段时间了。
我还想知道是否可能是 FastMM4 的问题?会不会是提供了虚假信息?在如下代码中。 TOLEStream 通常如何释放?
f.SaveToStream(TOleStream.Create(DataStream));
有没有一种方法可以在不使用 TFileStream 的情况下将数据发送到数据流?
嗨,雷米, 您可以在此处找到带有 fastmm 的 namespace 处理程序的工作演示项目和问题过程:http://mode5.webs.com/namespace.7z 加载项目时,单击按钮让命名空间处理程序加载文件。当你退出时,你应该得到 fastmm 错误。 亲切的问候,
最佳答案
如果您需要将 IStream 接口(interface)传递给某些内容,您应该查看 TStreamAdapter 对象,您可以在 TFileStream 上创建一个对象,并传递其 IStream 接口(interface)。
关于delphi - 如何在这段代码中释放 TOleStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4443376/