gpt4 book ai didi

delphi - Delphi 2009 中的函数 CreateProcess 中的访问冲突

转载 作者:行者123 更新时间:2023-12-03 14:39:25 26 4
gpt4 key购买 nike

在我的程序中,我有以下代码:

//Code
if not CreateProcess(nil, NonConstCmd, nil, nil, True, NORMAL_PRIORITY_CLASS or
CREATE_NEW_PROCESS_GROUP, nil, PCh, SI, P) then
//Code

我不断收到访问冲突错误。顺便说一下,在 Delphi7 中,相同的代码可以完美运行。我读过MSDN,发现Delphi中的CreateProcess函数可以修改第二个参数。最初它是 const,这就是为什么我创建一个具有相同值的新变量。但没有任何效果。

问题是:为什么这段代码不起作用?

最佳答案

问题出在 lpCommandLine 参数中。我怀疑你正在做这样的事情:

var
CmdLine: string;
...
CmdLine := 'notepad.exe';
CreateProcess(nil, PChar(CmdLine), ...)

这会导致访问冲突,因为 CmdLine 不是可写内存。该字符串是存储在只读存储器中的常量字符串。

相反,你可以这样做:

CmdLine := 'notepad.exe';
UniqueString(CmdLine);
CreateProcess(nil, PChar(CmdLine), ...)

这足以使 CmdLine 由可写内存支持。

仅仅使保存字符串的变量成为非常量是不够的,您还需要使支持字符串的内存也可写。当您将字符串文字分配给字符串变量时,该字符串变量指向只读内存。

关于delphi - Delphi 2009 中的函数 CreateProcess 中的访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6705532/

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