
同じデータをファイルへは書き込めるのですが、
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);
でエラーが出てしまいます。
こういった使用はできないのでしょうか?
どのように修正したら良いかお願いします。
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以外の質問でしたらその環境を補足で明示してください。その際、回答は他の方にお任せします(笑。
この回答への補足
お察しくださいましたように環境はBCBです。
TStreamは使用できないのですね。
TBlobStreamを使用しようとしたのですが、
未定義のシンボルとして使用ができないようで、使おうと思ったのですが…
TFileStream、TStringStream、TMemoryStreamは使用できるようなのですが、なぜでしょうか…。
No.2
- 回答日時:
>未定義のシンボル
たいていの場合、スペル間違いか必要なヘッダがインクルードされてないかどっちかです。
そのどちらでもないなら、具体的にソースを見なければ誰にも分かりません。
>TStreamは使用できないのですね。
「使用できない」のではなく、「インスタンス化できない」です。
要はTStreamが抽象クラスだということです。
この辺の話が良く飲み込めないのでしたら、もう一遍C++の教科書を読んで下さい。
TBlobStream に必要なインクルードファイルが何か
結局わからなかったのですが、
とりあえず、TMemoryStreamを使用しました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ストリームへの保存処理
-
インスタンスとオブジェクト
-
関数の引数に複数のユーザ定義...
-
書籍 メタプログラミングRuby...
-
子クラスのインスタンスから親...
-
rubyのインスタンスのクラス名取得
-
Rubyの継承関係について質問い...
-
Ruby 文法 ブロックの中で自ク...
-
rubyで変数から指定したバイト...
-
rubyでnums.each_char()の意味...
-
Ruby1.9で日付と時刻を合成した...
-
dllからデータグリッドビューに...
-
Ruby on rails のモデルオブジ...
-
お互いをメンバに持つようなク...
-
::ってなに?
-
クラスメソッドのインスタンス...
-
Ruby 特異メソッドのnewが先に...
-
別のクラスのインスタンスの作り方
-
あるクラスの全てのインスタン...
-
プログラミングのクラス、イン...
おすすめ情報