在win10中,为什么最新的参数不能在CreateProcess()中使用"&"?

eus*_*srh -1 c++ windows visual-c++

有我的代码:

int main()
{
STARTUPINFO si = { sizeof(si) };
PPROCESS_INFORMATION pi;  
TCHAR szCommandLine[] = TEXT("C:\Windows\notepad.exe");
auto is_suc = CreateProcess(NULL, szCommandLine, NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

在win10 CreateProcess()API中是否存在一些问题?

Mr.*_*C64 5

你有:

PPROCESS_INFORMATION pi;  
Run Code Online (Sandbox Code Playgroud)

这意味着(注意你之前有一个PPROCESS_INFORMATION,使实际类型成为指针 PROCESS_INFORMATION):

// PPROCESS_INFORMATION = PROCESS_INFORMATION*
PROCESS_INFORMATION *pi;  
Run Code Online (Sandbox Code Playgroud)

CreateProcess期望一个指针 PROCESS_INFORMATION作为最后一个参数,但是&pi你正在传递一个指向指针的指针(双重间接).

您可以通过更改pi变量的定义来解决此问题:

PROCESS_INFORMATION pi;
Run Code Online (Sandbox Code Playgroud)

然后&pi将正确地成为一个PROCESS_INFORMATION*,如CreateProcess预期的那样.并且,成功时,pi变量将按预期接收过程标识信息.

PS为了更好的代码卫生,我建议也要清除PROCESS_INFORMATION结构:

PROCESS_INFORMATION pi{ 0 };
Run Code Online (Sandbox Code Playgroud)

  • 在P前面添加的类型名中添加指针必须是有史以来最糟糕的约定. (2认同)