Access Violation in function CreateProcess in Delphi 2009
在我的程序中,我有以下代码:
1 2 3 4 | //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,这就是为什么我创建一个具有相同值的新变量的原因。
但这没有效果。
问题是:为什么此代码不起作用?
问题出在
1 2 3 4 5 | var CmdLine: string; ... CmdLine := 'notepad.exe'; CreateProcess(nil, PChar(CmdLine), ...) |
由于
相反,您可以这样做:
1 2 3 | CmdLine := 'notepad.exe'; UniqueString(CmdLine); CreateProcess(nil, PChar(CmdLine), ...) |
这足以使
仅使包含字符串的变量为非常量是不够的,还需要使支持字符串的内存也可写。 当您将字符串文字分配给字符串变量时,字符串变量指向只读存储器。
这里解释了为什么Unicode Delphi要求使用不同的方法来调用CreateProcess:http://edn.embarcadero.com/article/38693