同じデータをファイルへは書き込めるのですが、
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) findメソッドの変数について 6 2023/06/23 08:01
- C言語・C++・C# C言語のバイナリファイルに関する質問 8 2022/06/24 07:20
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ArduinoのジャイロモジュールMP...
-
C言語をコンパイルするとコンピ...
-
mallocについて
-
gccを行ってもexeファイルが生...
-
c言語
-
C言語 列挙型(enum型)変数について
-
卒業研究でよく分からないとこ...
-
C言語初心者 構造体 課題について
-
C++でデスクトップGUIアプリ開...
-
C言語初心者 構造体 課題について
-
win10で、正確な待ち時間の作り方
-
[C言語]fputsとfprintfの違い
-
VisualStudio2022でC言語プログ...
-
大量のデータを読み込んで表示...
-
C言語初心者 ポインタについて...
-
あなたは、Excelはどうやって学...
-
C言語初心者です、、、お助けく...
-
システムエンジニアの適正について
-
Stuck
-
Notepad++の関数リスト表示の変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どういうプログラムで組みます...
-
関数の引数に複数のユーザ定義...
-
別のクラスのインスタンスの作り方
-
get() と find() の違いについて
-
パイソンのクラス
-
「arg」は何の略?
-
No route matches [GET] "/post...
-
A1の値をファイル名に指定した...
-
エクセルVBA オートフィルタで...
-
Rubyについて質問です
-
エラー「メソッドまたはデータ...
-
VBAで型が一致しないエラー(バ...
-
教えてください。vb5.0
-
Csvファイルの最終行を取得する...
-
クラス名やモジュール名の競合...
-
HSTLやSSTL等のI/Oピン
-
10円未満を切り捨てる方法は?
-
What class are you in? には何...
-
try ~ catch構文が使えない
-
【BrowseForFolderでデスクトッ...
おすすめ情報