これは、私が Web ブラウザ コンポーネントにファイルをロードするために使用する Delphi で行われたカスタム ネームスペース ハンドラからのものです。
データストリーム: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, Dummy); TotalSize:= F.Size; F.フリー; 終わり;
問題は、Fastmm4 がプログラムの終了時にメモリ リーク エラーを出し、TOleStream が解放されていないことを示すことです。どうすれば解放できますか? TOleStream を変数に入れて、このように割り当てると
変数 TOS:TOleStream; TOS:=TOleStream.Create(データストリーム) TOS.CopyFrom(F, F.Size); .. TOS.無料; 終わり;
最後に、TOS 変数を解放すると、エラー (ComObj 内の TComObject.ObjRelease を指す EAccessViolation) が発生します。コメントとヘルプをいただければ幸いです。この問題は、しばらくの間私を悩ませてきました。
また、FastMM4で何かできるのだろうかと思っていますか? 虚偽の情報を提供している可能性はありますか?次のようなコードで。通常、TOLEStream はどのように解放されますか?
f.SaveToStream(TOleStream.Create(DataStream));
また、TFileStream を使用せずにデータをデータストリームに送信する方法はありますか?
Remy さん、こちらで fastmm と問題の手順を使用した名前空間ハンドラーの動作デモ プロジェクトを見つけることができます: http://mode5.webs.com/namespace.7z プロジェクトが読み込まれたら、ボタンをクリックして名前空間ハンドラーを読み込みます。ファイル。終了すると、fastmm エラーが発生するはずです。敬具、