gpt4 book ai didi

delphi - 如何在这段代码中释放 TOleStream

转载 作者:行者123 更新时间:2023-12-03 15:01:39 25 4
gpt4 key购买 nike

这是来自 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com