「BMPやWAVファイルだとデータが読まれてしまうので…
」
ttp://homepage2.nifty.com/natupaji/DxLib/dxtec.html#M3
で紹介されている方法でwavファイルのファイル識別文字列を変更しようとして上の紹介にある方法を真似て次のソースを打ちました。
//sndファイルを読み込む
int CMainSystem::RoadOfsndFile(char* file_name)
{
FILE *fp;
int Handle=0;
fp = fopen(file_name,"r+b");//←ファイルは正常にオープン
fwrite("RIFF",sizeof(char),4,fp);// ←ここは成功
fclose(fp);// ファイルを閉じる
Handle=::LoadSoundMem(file_name);// 曲データを改めて読みこむ
fp = fopen(file_name,"r+b");//←fpにNULLが返ってくる
fwrite(" ",sizeof(char),4,fp);//←ここで強制終了
fclose(fp);// ファイルを閉じる
return Handle;
}
実行したらこの関数のところで強制終了してしまいました。
デバッガでどの行がおかしいか確認してみるとLoadSoundMemの後のファイルオープンが失敗していることがわかりました。
だけれどもファイルオープンに失敗するのかがわかりません。なぜなのでしょうか・・・
試しに
「LoadSoundMemの直後にファイルオープンしてファイル識別文字列を変更」
ではなく
「アプリ終了時(デストラクタ)にファイルオープンしてファイル識別文字列を変更」
という風に変えると問題なくいきました。
もしかしたら
「LoadSoundMemの直後にファイルオープンしようとしているから?」
かと思い、質問させていただきました。
環境は
OS:WindowsXPSP3
開発環境:VC2008
DxLib:バージョンは3.03
です