GetOpenFileNameの挙動について
Posted: 2016年9月22日(木) 23:11
こんにちは。
DxLibでユーザーが指定した画像を表示するプログラムを組みました。
ですが、GetOpenFileNameをコールするタイミングで次のような例外が発生します。
[2]DxLib用ソリューション(ゲームプログラミングの館 で配布されているVisualStdio2012 以降用のプロジェクト)でないプロジェクトでも発生する
[3]アプリケーションは落ちない
[4]InitCommonControls()をコールした/していないにかかわらず発生する
[5]DxLibInit()を呼び出す/呼び出さないにかかわらず発生する
たぶんDxLibには関係ないところ(VisualStdio周り)で発生しているのだろう、ぐらいしか考えてもわかりませんでした。
自分個人の疑問は
[1]この状態は改善可能なのか
[2]改善する能力があるとして、改善すべきなのか
今のところ上記2点です。
どなたか、改善方法をご教示よろしくお願いします。
例外発生部分
///////
環境
Windows 8.1
DxLibでユーザーが指定した画像を表示するプログラムを組みました。
ですが、GetOpenFileNameをコールするタイミングで次のような例外が発生します。
[1]x64でビルドしていること[Debug/Releaseかかわらず](Win32では発生しません)11160 22:50:34.196 ShipAssertNoUI '.sl5' (0x2e736c35)
11160 22:50:34.196 Throwing exception: エラーを特定できません (.sl5)
0x00007FFA70908A5C で例外がスローされました (GameProg_2012.exe 内): Microsoft C++ の例外: GCError (メモリの場所 0x000000EC4AD5E540)。
0x00007FFA70908A5C で例外がスローされました (GameProg_2012.exe 内): Microsoft C++ の例外: [rethrow] (メモリの場所 0x0000000000000000)。
11160 22:50:34.198 ShipAssertNoUI '.sl5' (0x2e736c35)
11160 22:50:34.198 Throwing exception: エラーを特定できません (.sl5)
0x00007FFA70908A5C で例外がスローされました (GameProg_2012.exe 内): Microsoft C++ の例外: GCError (メモリの場所 0x000000EC4AD5E540)。
0x00007FFA70908A5C で例外がスローされました (GameProg_2012.exe 内): Microsoft C++ の例外: [rethrow] (メモリの場所 0x0000000000000000)。
11160 22:50:34.202 ShipAssertNoUI '.sl5' (0x2e736c35)
11160 22:50:34.202 Throwing exception: エラーを特定できません (.sl5)
0x00007FFA70908A5C で例外がスローされました (GameProg_2012.exe 内): Microsoft C++ の例外: GCError (メモリの場所 0x000000EC4AD5E540)。
0x00007FFA70908A5C で例外がスローされました (GameProg_2012.exe 内): Microsoft C++ の例外: [rethrow] (メモリの場所 0x0000000000000000)。
[2]DxLib用ソリューション(ゲームプログラミングの館 で配布されているVisualStdio2012 以降用のプロジェクト)でないプロジェクトでも発生する
[3]アプリケーションは落ちない
[4]InitCommonControls()をコールした/していないにかかわらず発生する
[5]DxLibInit()を呼び出す/呼び出さないにかかわらず発生する
たぶんDxLibには関係ないところ(VisualStdio周り)で発生しているのだろう、ぐらいしか考えてもわかりませんでした。
自分個人の疑問は
[1]この状態は改善可能なのか
[2]改善する能力があるとして、改善すべきなのか
今のところ上記2点です。
どなたか、改善方法をご教示よろしくお願いします。
例外発生部分
int GetUserOpenFileName(char* fileName, int fileNameLength,const char* fileFilter)
{
OPENFILENAMEA ofn;
if (fileName == NULL)
return 0;
ZeroMemory(&ofn, sizeof(OPENFILENAMEA));
ofn.lStructSize = sizeof(OPENFILENAMEA);
ofn.hwndOwner = GetMainWindowHandle(); //DxLibを使えない環境で試したときはNULL
ofn.lpstrFilter = fileFilter;
ofn.nFilterIndex = 0;
ofn.lpstrFile = fileName;
ofn.nMaxFile = fileNameLength;
ofn.Flags = OFN_CREATEPROMPT | OFN_HIDEREADONLY | OFN_NOCHANGEDIR;
if (fileFilter == NULL)ofn.lpstrFilter = "All Files(*.*)\0*.*\0\0";
fileName[0] = 0;
return GetOpenFileName(&ofn); //ここで発生している?
}
環境
Windows 8.1
► スポイラーを表示