作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是来自 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 放入变量中并像这样分配
varTOS: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/
我是一名优秀的程序员,十分优秀!