CreateProcess を使用してゲームの .exe を開こうとしていますが、未処理の例外エラーが発生します。私はすでに問題と解決策を見つけましたが、ファイル ダイアログ ボックスから CreateProcess の 2 番目のパラメーターのパスを取得する必要があります (その部分は完了しており、機能しています)。問題は:
CreateProcess の 2 番目のパラメーターについては、その値 (2 番目のパラメーター) を持つ変数を宣言する必要がありますが、ファイル ダイアログ ボックスで選択されたファイルへのパスの変数を「ポイント」すると、それは実行されません。もう働かない。
これが本当にばかげた質問であれば申し訳ありませんが、私はC++から始めています。
動作するコードは次のとおりです。
wchar_t szGameDir[] = L"PATH_TO_EXE";
if ( CreateProcess (
NULL,
szGameDir, NULL, NULL, FALSE,
CREATE_UNICODE_ENVIRONMENT,
NULL, NULL,
&pstStartupInfo, &pstProcInfo ) )
しかし、szGameDir を 'pszGameDir' (ユーザーが選択した EXE へのパス) の値に設定すると、未処理の例外エラーが発生します...
wchar_t* szGameDir = pszGameDir;
if ( CreateProcess (
NULL,
szGameDir, NULL, NULL, FALSE,
CREATE_UNICODE_ENVIRONMENT,
NULL, NULL,
&pstStartupInfo, &pstProcInfo ) )
ここで「pszGameDir」を初期化します。
OPENFILENAME DialogBox;
ZeroMemory ( &DialogBox, sizeof(DialogBox) );
DialogBox.lStructSize = sizeof(OPENFILENAME);
DialogBox.hwndOwner = NULL;
DialogBox.lpstrFilter = L"Grand Theft Auto: Vice City (*.exe)\0*.exe\0";
DialogBox.lpstrFile = (LPTSTR)this->pszGameDir;
DialogBox.nMaxFile = MAX_PATH;
DialogBox.nMaxFileTitle = sizeof ( L"gta-vc.exe" );
DialogBox.lpstrTitle = L"Please, select 'gta-vc.exe'";
DialogBox.Flags = 0x02000000 | 0x00001000 | 0x00000400 | 0x10000000 | 0x00020000 | 0x00000800 | 0x0000008;
DialogBox.nFileExtension = (WORD)"exe";
DialogBox.lpstrDefExt = L"exe";
return GetOpenFileName ( &DialogBox ) != 0 ? 1 : NULL;
誰かが私を助けることができますか?(はい、すでに検索しましたが、正直なところ、この特定のことについては見つけられませんでした。修正することもできませんでした..)