こんにちはYunoです
今変数に値がきちんと代入されないという問題で悩んでいます
この前、不運にもデータが飛んでコードを書き直したのですが
その時にDxLibを
http://homepage2.nifty.com/natupaji/DxL ... VCTest.exe
のものに変えたところ
以下の関数で
char *pathに値が代入されないということが発生しました
調べると
CXX000069変数にはスタックフレームが必要です
と出て3行目のあたりで値が0x00000000となったので
いろいろ調べてみたのですが…
スタックフレームでググっても
そのようなものが見つかりません
どのようにすれば直るかどなたかわかる方いませんか?
以下がそのコードです
一応
file_load(構造体)
>int buf
>int fsize
void DxAPath(char* path){
SetUseDXArchiveFlag(TRUE);
SetDXArchiveExtension("dat");
SetDXArchiveKeyString(key);
file_load.fsize = FileRead_size(path);
if(file_load.fsize<=0){
FILE *fp=fopen("\\e_log.txt","wb");
fwrite(path,sizeof(char),strlen(path),fp);
fclose(fp);
DxLib_End();
}
file_load.buf = (int *)malloc((file_load.fsize+1)*sizeof(int));
int fhandle = FileRead_open(path);
FileRead_read(file_load.buf,file_load.fsize,fhandle);
FileRead_close(fhandle);
SetUseDXArchiveFlag(FALSE);
}
CX000069:スタックフレームが必要です…?
Re:CX000069:スタックフレームが必要です…?
テスト版のようですから何が起きても不思議はないと思いますが。
ということはその DxAPath関数は(ファイルが開けない等)正常に動作していないということですか?
呼び出し元はどうなっているのですか?
ということはその DxAPath関数は(ファイルが開けない等)正常に動作していないということですか?
呼び出し元はどうなっているのですか?
Re:CX000069:スタックフレームが必要です…?
先ほど最新版のものに変えて試しましたがやはりだめでした
確かにファイルは一つも開けていません…
要するにpathが空っぽなので
File_Read_sizeが0
File_Read_openは-1以下になります
呼び出し元はすべて
DxAPath("./アーカイブ名/aaa/bbb.gph");
img_board[10] = DecryptionReadingG("./アーカイブ名/aaa/bbb.gph");<-復号化関数
DxAPath("./アーカイブ名/ccc/ddd.gph");
img_board[10] = DecryptionReadingG("./アーカイブ名/ccc/ddd.gph");
:
:
という感じです
確かにファイルは一つも開けていません…
要するにpathが空っぽなので
File_Read_sizeが0
File_Read_openは-1以下になります
呼び出し元はすべて
DxAPath("./アーカイブ名/aaa/bbb.gph");
img_board[10] = DecryptionReadingG("./アーカイブ名/aaa/bbb.gph");<-復号化関数
DxAPath("./アーカイブ名/ccc/ddd.gph");
img_board[10] = DecryptionReadingG("./アーカイブ名/ccc/ddd.gph");
:
:
という感じです
Re:CX000069:スタックフレームが必要です…?
>pathが空っぽなので
それをどこで確認していますか?
もし、ウォッチウインドウなどでしたら、それは信用できないかもしれません。
FileRead_sizeの前に
DxLib::AppLogAdd("%s\n", path);
を呼んで、正しく pathがセットされているかログやデバッガの出力ウインドウから確認してみてください。
これがうまくいっていないようですと、スタックが破壊されている可能性があります。
この場合はこのソース以外のどこかに問題があるので、プロジェクト一式がないと
原因などはわかりません。
反対にこれがうまく表示されたのであれば、path変数に正しく値はセットされていることに
なります。
pathが正しいのに開けない、ということはアーカイブの中に対象のファイルが入っていない、
或いはパスが間違っているのかもしれません。
アーカイブをデコードしてみて入っているかどうか、指定しているパスが正しいかどうか
確認してみてください。
それでも判らなければ、再現可能なプロジェクト一式をどこかにアップしてもらうしか
ないかと。
それをどこで確認していますか?
もし、ウォッチウインドウなどでしたら、それは信用できないかもしれません。
FileRead_sizeの前に
DxLib::AppLogAdd("%s\n", path);
を呼んで、正しく pathがセットされているかログやデバッガの出力ウインドウから確認してみてください。
これがうまくいっていないようですと、スタックが破壊されている可能性があります。
この場合はこのソース以外のどこかに問題があるので、プロジェクト一式がないと
原因などはわかりません。
反対にこれがうまく表示されたのであれば、path変数に正しく値はセットされていることに
なります。
pathが正しいのに開けない、ということはアーカイブの中に対象のファイルが入っていない、
或いはパスが間違っているのかもしれません。
アーカイブをデコードしてみて入っているかどうか、指定しているパスが正しいかどうか
確認してみてください。
それでも判らなければ、再現可能なプロジェクト一式をどこかにアップしてもらうしか
ないかと。