• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ストリームへの保存処理)

ストリームへの保存処理がうまくいかない理由と修正方法は?

このQ&Aのポイント
  • 質問者は、ストリームへの保存処理がファイルへの書き込みとは異なり、エラーが発生していることに気付きました。
  • ファイルへの書き込みではうまくいくのに、ストリームへの書き込みではアクセスバイオレーションエラーが発生します。
  • 質問者は、この問題を解決するために修正方法を求めています。

質問者が選んだベストアンサー

  • ベストアンサー
  • KoHal
  • ベストアンサー率60% (110/181)
回答No.1

質問するときは環境を明示してください。 TStreamならBCBかBSDだと思いますが、それぞれバージョンによっても話が変わりますし。 一応BCBのVCLだという線で回答。 >TStream *pStream; >pStream->WriteBuffer(buf, bufsize); 問題点は2つ。 1.TStreamのインスタンスが生成されていない。  よってアクセスバイオレーションがおきる。 2.しかしそもそもTStreamはインスタンス化できない。 VCLのヘルプから引用 「TStream はインスタンス化しないでください。下位クラスでのオーバーライドが必要な純粋仮想メソッドに依存します。」 というわけで、たとえばファイルストリームに書き出したいならこんな感じ。  TFileStream* pFStream = new TFileStream( "bmp.bmp", fmCreate );  pFStream->WriteBuffer( buf, bufsize );  delete pFStream; //後始末を忘れない TStreamの下位クラスは用途別に各種用意されています。 詳細はヘルプを参照してください。 ※VCL以外の質問でしたらその環境を補足で明示してください。その際、回答は他の方にお任せします(笑。

Caya
質問者

お礼

回答ありがとうございます。 補足のほうへ書き足しますので、 よろしくお願いします。

Caya
質問者

補足

お察しくださいましたように環境はBCBです。 TStreamは使用できないのですね。 TBlobStreamを使用しようとしたのですが、 未定義のシンボルとして使用ができないようで、使おうと思ったのですが… TFileStream、TStringStream、TMemoryStreamは使用できるようなのですが、なぜでしょうか…。

その他の回答 (1)

  • KoHal
  • ベストアンサー率60% (110/181)
回答No.2

>未定義のシンボル たいていの場合、スペル間違いか必要なヘッダがインクルードされてないかどっちかです。 そのどちらでもないなら、具体的にソースを見なければ誰にも分かりません。 >TStreamは使用できないのですね。 「使用できない」のではなく、「インスタンス化できない」です。 要はTStreamが抽象クラスだということです。 この辺の話が良く飲み込めないのでしたら、もう一遍C++の教科書を読んで下さい。

Caya
質問者

お礼

TBlobStream に必要なインクルードファイルが何か 結局わからなかったのですが、 とりあえず、TMemoryStreamを使用しました。 ありがとうございました。

関連するQ&A