CreateProcess @ Необработанное исключение, когда напрямую не используется строка

Я пытаюсь использовать CreateProcess, чтобы открыть игру .exe, но у меня ошибка необработанного исключения. Я уже выяснил проблему и решение, но мне нужно получить путь для второго параметра CreateProcess из диалогового окна файла (эта часть сделана и работает). Проблема в:

Для второго параметра CreateProcess мне нужно объявить переменную со значением в ней (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;

Кто-нибудь может мне помочь? (Да, я уже искал, но, честно говоря, я не нашел об этой конкретной вещи, я также не смог исправить это ..)

1

Решение

CreateProcess требует, чтобы параметр командной строки был доступен для записи. Прочитайте описание аргумента на MSDN:

Версия этой функции Unicode, CreateProcessW, может изменять содержимое этой строки. Следовательно, этот параметр не может быть указателем на постоянную память (такую ​​как переменная const или литеральная строка). Если этот параметр является константной строкой, функция может вызвать нарушение прав доступа.

Боюсь, это должно быть доступно для записи.

1

Другие решения

Других решений пока нет …