這是從Delphi中完成的自定義名稱空間處理程序中完成的,我用它將文件加載到webbrowser組件中。如何在這段代碼中釋放TOleStream
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;
的問題是程序結束,並說TOleStream未釋放時Fastmm4給出了內存泄漏錯誤。我如何釋放它?如果我把TOleStream一個變量,並將這樣的
var TOS:TOleStream; TOS:=TOleStream.Create(DataStream) TOS.CopyFrom(F, F.Size); .. TOS.Free; End;
當我釋放TOS可變我得到最終的誤差(EAccessViolation指向TComObject.ObjRelease在ComObj)。我會感謝您的意見和幫助。這個問題一直在困擾我一段時間。
我也想知道它是否可以與FastMM4?它會提供虛假信息嗎?在一些代碼如下。 TOLEStream通常是如何釋放的?
f.SaveToStream(TOleStream.Create(DataStream));
有沒有辦法發送數據到數據流而不使用TFileStream?
雷米嗨, 你可以找到與fastmm和問題的過程這裏的命名空間處理器的工作演示項目:http://mode5.webs.com/namespace.7z 當項目加載,單擊按鈕具有的命名空間處理程序載入的文件。當你退出時,你應該得到fastmm錯誤。 親切的問候,
嗨,模式,歡迎來到StackOverflow。這是一個相當不錯的問題,但如果我們知道在釋放錯誤時得到的錯誤會有所幫助。你能編輯你的問題,並複製你在這裏給我們的錯誤嗎?謝謝。 – 2010-12-14 20:02:55
FastMM沒有錯。你到底想要做什麼?將文件加載到IStream中,並使用它做些什麼?該文件是否應該修改,還是希望它是隻讀的? – 2010-12-17 16:08:12