- ベストアンサー
複数ファイルを1つにまとめる コード添削願い
- 複数のファイルを1つにまとめるコードの添削をお願いします。
- リストボックスのファイル一覧からアドレスを取得し、まとめていく手順ですが、WriteFile関数で書き込みエラーが発生します。
- ファイルの読み込みや書き込みの際にエラーが発生しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
やりたいことと 書かれているコードの整合性が取れていないように思います allocで取得した領域を再利用するために reallocを使われているようですが 複数のファイルの内容を bufに溜め込むつもりで使っているのであれば間違っていると思いますよ 最初に読み込んだデータの領域をreallocで破壊してしまうように思います 読み込むファイル数分のbuf(BytePtr)の配列を用意しておいてここに読み込むようにするか もしくはLastFileSizeでReallocをかけてReadFileに与えるbufを前回読み込んだ位置の次を指示するようにしないとうまくないでしょう たとえば 初回は bufで与え 25byte読み込んだのであれば 2回目は buf+26 としてやらないと 最初に読んだデータが破壊されます ただ reallocで再確保した際に 前回そのバッファを変更した内容まで再確保した領域へコピーするかどうかはドキュメント(マニュアル)で確認しましょう # コピーまでは面倒見てくれないと思いますけど … WriteFileがFalseを返して失敗したのであれば GetLastError/FormatMessageなどを使って エラーの原因を確認しましょう
その他の回答 (2)
- NOBNNN
- ベストアンサー率50% (93/186)
その他(プログラミング)に 質問してください。 カテゴリ違いです。 ここは VBとVBA VB.NET などです。 ActiveBASIC は私は知りません。 明記されていないから #1の回答になったのです。 実際にVBでコンパイルするとあちらこちら エラーだらけです。 >>>VBでSendDlgItemMessage は使えません。 >ご自分で別なクラスを作っているならありえますが・・・ >>とありますが、普通に定義してしまえばいいのでは? >>クラスも何も、 >>Declare Function SendDlgItemMessage Lib "user32" Alias "SendDlgItemMessageA" (hDlg As HWND,nIDDlgItem As Long,Msg As DWord,wParam As DWord,lParam As DWord) As Long の一行で出来ると思います。 >>VBで使えないとして、 >>SendMessage(GetDlgItem(hMainWnd,ListBox1),LB_GETTEXTLEN,n,0) >>だと解釈してください。 こういうことがご存知でしたら 自分で修正したらどうですか ここは VBのカテゴリです。 相手に修正を加えて検証をしてください と聞こえてきます。
- NOBNNN
- ベストアンサー率50% (93/186)
VBのバージョンは何を尾s使いですか? Windowsシェル WSHなどで VBS で Excel VBA VB6.0 など 書かないとだめです。 もしかして カテゴリ違い!! コンパイルエラーは自分で ヘルプを見ればわかる範囲のはず。 たとえば len=SendDlgItemMessage(hMainWnd,ListBox1,LB_GETTEXTLEN,n,0)+1 len= は予約語ですよ。 VBでSendDlgItemMessage は使えません。 ご自分で別なクラスを作っているならありえますが・・・ VC++ などのほかの言語とごちゃまぜ?? 質問を明確にしてください.
お礼
失礼しました。 VB・・・といいますか、ActiveBasicを使っています。 同じBASICでも書き方が違うのですか・・・ しかし、 >VBでSendDlgItemMessage は使えません。 >ご自分で別なクラスを作っているならありえますが・・・ とありますが、普通に定義してしまえばいいのでは? クラスも何も、 Declare Function SendDlgItemMessage Lib "user32" Alias "SendDlgItemMessageA" (hDlg As HWND,nIDDlgItem As Long,Msg As DWord,wParam As DWord,lParam As DWord) As Long の一行で出来ると思います。 VBで使えないとして、 SendMessage(GetDlgItem(hMainWnd,ListBox1),LB_GETTEXTLEN,n,0) だと解釈してください。 よろしくお願いします。
補足
ああ、そうそう、もうひとつ。 >質問を明確にしてください. とありますが、コンパイルエラーはありません。 質問の方に記載させていただいたとおり、 『WriteFile関数の部分で、書き込みが出来ずエラーが返ります。』 ということです。 つまり、WriteFileの戻り値でFALSEが返るということです。 ABのバージョンで申し訳ないですが、 4.23.000を使用しています。