gpt4 book ai didi

c++ - 不直接使用字符串时的CreateProcess @Unhandled异常

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:05 24 4
gpt4 key购买 nike

我正在尝试使用 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;

有人可以帮助我吗? (是的,我已经搜索过了,但老实说我还没有找到这个具体的东西,我也无法修复它..)

最佳答案

CreateProcess 需要命令行参数是可写的。在 MSDN 阅读参数说明:

The Unicode version of this function, CreateProcessW, can modify the contents of this string. Therefore, this parameter cannot be a pointer to read-only memory (such as a const variable or a literal string). If this parameter is a constant string, the function may cause an access violation.

恐怕它必须是可写的。

关于c++ - 不直接使用字符串时的CreateProcess @Unhandled异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15774858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com