プロが教える店舗&オフィスのセキュリティ対策術

同じデータをファイルへは書き込めるのですが、
TStream への書き込みができません。
略してソースを書きますが、
unsigned char* buf;
DWORD bufsize;

// 略 :: buf bufsizeにデータを入れる処理 //

// うまくいく
FILE* foutput;
foutput = fopen("bmp.bmp", "w");
fwrite(buf, 1, bufsize, foutput);

// アクセスバイオレーションエラーがでる
TStream *pStream;
pStream->WriteBuffer(buf, bufsize);

コンパイルは通るのですが、実行すると
pStream->WriteBuffer(buf, bufsize);
でエラーが出てしまいます。
こういった使用はできないのでしょうか?
どのように修正したら良いかお願いします。

A 回答 (2件)

質問するときは環境を明示してください。



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以外の質問でしたらその環境を補足で明示してください。その際、回答は他の方にお任せします(笑。

この回答への補足

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

補足日時:2006/04/25 13:59
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/04/25 13:59

>未定義のシンボル


たいていの場合、スペル間違いか必要なヘッダがインクルードされてないかどっちかです。
そのどちらでもないなら、具体的にソースを見なければ誰にも分かりません。

>TStreamは使用できないのですね。
「使用できない」のではなく、「インスタンス化できない」です。
要はTStreamが抽象クラスだということです。
この辺の話が良く飲み込めないのでしたら、もう一遍C++の教科書を読んで下さい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/04/26 13:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!