これはDelphiで行われたカスタムネームスペースハンドラからのものです。ファイルをWebブラウザコンポーネントにロードするために使用します。このビットのコードで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がComObj内TComObject.ObjReleaseを指す)エラーが発生します。私はあなたのコメントと助けに感謝します。この問題は今私を悩ませています。
また、FastMM4で何かできるかどうか疑問に思っていますか?それは虚偽の情報を与えることができますか?次のようなコードで。 TOLEStreamはどのように通常解放されますか?
f.SaveToStream(TOleStream.Create(DataStream));
TFileStreamを使用せずにデータストリームにデータを送信する方法はありますか?
こんにちはレミー、 あなたがfastmmとここでの問題の手順で名前空間ハンドラのワーキングデモプロジェクトを見つけることができます。プロジェクトのロードは、名前空間ハンドラがファイルを読み込む持っているボタンをクリックしhttp://mode5.webs.com/namespace.7z 。終了すると、fastmmエラーが発生します。 敬具、
こんにちは、モード、私はStackOverflowへようこそ。それはかなり良い質問ですが、あなたがそれを解放するときにどんなエラーが発生したのか分かっていれば助けになります。質問を編集して、あなたが私たちのためにここに入力したエラーをコピーできますか?ありがとう。 –
FastMMは間違っていません。あなたは正確に何をしようとしていますか?ファイルをIStreamにロードして、何か処理をしますか?ファイルを修正するのか、それとも読み込み専用にしたいのですか? –