vra*_*lex 10 delphi createprocess delphi-2009 access-violation
在我的程序中,我有以下代码:
//Code
if not CreateProcess(nil, NonConstCmd, nil, nil, True, NORMAL_PRIORITY_CLASS or
CREATE_NEW_PROCESS_GROUP, nil, PCh, SI, P) then
//Code
Run Code Online (Sandbox Code Playgroud)
并且我一直收到访问冲突错误.顺便说一下,在Delphi7中,相同的代码完美地运行.我读过MSDN,发现Delphi中的CreateProcess函数可以修改第二个参数.初始它是const,这就是为什么我创建一个具有相同值的新变量.但它没有任何效果.
问题是:为什么这段代码不起作用?
Dav*_*nan 24
问题出在lpCommandLine参数中.我怀疑你做的是这样的:
var
CmdLine: string;
...
CmdLine := 'notepad.exe';
CreateProcess(nil, PChar(CmdLine), ...)
Run Code Online (Sandbox Code Playgroud)
这会导致访问冲突,因为CmdLine它不是可写内存.该字符串是存储在只读存储器中的常量字符串.
相反,你可以这样做:
CmdLine := 'notepad.exe';
UniqueString(CmdLine);
CreateProcess(nil, PChar(CmdLine), ...)
Run Code Online (Sandbox Code Playgroud)
这足以使CmdLine可写内存得到支持.
仅仅使变量保持字符串非常量是不够的,您需要使备份字符串的内存也可写.将字符串文字分配给字符串变量时,字符串变量指向只读内存.
| 归档时间: |
|
| 查看次数: |
4329 次 |
| 最近记录: |