这来自在Delphi中完成的自定义 namespace 处理程序,我使用该处理程序将文件加载到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,虚拟);
TotalSize:= F.Size;
F.免费;
结尾;
问题在于,当程序结束并指示未释放TOleStream时,Fastmm4给出了内存泄漏错误。我如何释放它?如果我将TOleStream放在变量中并这样分配
变种
TOS:TOleStream;
TOS:= TOleStream.Create(DataStream)
TOS.CopyFrom(F,F.Size);
..
TOS。免费;
结尾;
最后,当我释放TOS变量时,我得到一个错误(EAccessViolation指向ComObj中的TComObject.ObjRelease)。多谢您的意见和帮助。这个问题困扰了我一段时间了。
我也想知道FastMM4是否可以解决问题?可能会提供虚假信息吗?在如下代码中。 TOLEStream通常如何释放?
f.SaveToStream(TOleStream.Create(DataStream));
有没有一种方法可以在不使用TFileStream的情况下将数据发送到数据流?
雷米,您好,
您可以在此处找到带有fastmm和问题过程的 namespace 处理程序的有效演示项目:http://mode5.webs.com/namespace.7z
加载项目时,单击按钮以使 namespace 处理程序加载文件。退出时,您将收到fastmm错误。
亲切的问候
最佳答案
如果需要将IStream接口(interface)传递给某些对象,则应查看TStreamAdapter对象,可以在TFileStream上创建一个对象,然后传递其IStream接口(interface)。