我正在尝试使用CreateProcess来打开游戏.exe但是我遇到了未处理的异常错误。我已经找到了问题和解决方案,但我需要从文件对话框中获取CreateProcess的第二个参数的路径(该部分已完成且有效)。问题是:
对于CreateProcess的第二个参数,我需要声明一个带有值的变量(第二个参数),但如果我“指向”它到文件对话框中所选文件路径的变量,它不再起作用了。
如果这是一个非常愚蠢的问题,我很抱歉,但我是从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;
有人能帮助我吗? (是的,我确实已经搜索过,但说实话,我还没有找到这个特定的东西,我也无法修复它。)
答案 0 :(得分:1)
CreateProcess需要命令行参数可写。阅读MSDN的参数说明:
此函数的Unicode版本CreateProcessW可以修改此字符串的内容。因此,此参数不能是只读内存的指针(例如const变量或文字字符串)。如果此参数是常量字符串,则该函数可能会导致访问冲突。
我害怕它必须是可写的。