C++ 在win10中,为什么最新参数不能在CreateProcess()中使用“&”?

C++ 在win10中,为什么最新参数不能在CreateProcess()中使用“&”?,c++,windows,visual-c++,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; } win10

这是我的代码:

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;
}
win10 CreateProcess API中是否存在问题?

您有:

这意味着请注意,在进程_信息之前有一个p,使实际类型成为指向进程_信息的指针:

CreateProcess需要一个指向PROCESS_信息的指针作为最后一个参数,但使用&pi时,您将传递指向指针双间接寻址的指针

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

PROCESS_INFORMATION pi;
然后&pi将正确地成为流程信息*,正如CreateProcess所期望的那样。成功后,pi变量将按预期接收过程标识信息

另外,为了更好地保持代码卫生,我建议还应明确流程信息结构:

PROCESS_INFORMATION pi{ 0 };

当你试图编译代码时,你会遇到什么错误?你是说这无法编译,还是仅仅是intellisense发出错误警告它无法编译,因为他可能在pi变量定义中有一个输入错误;应该是进程信息pi,但他有进程信息pi注意首字母P,这使pi成为进程信息*。请用文本形式的代码替换图像。欢迎使用堆栈溢出!你的文本图像。它不能被大声朗读或复制到编辑器中,而且索引也不太好,这意味着其他有同样问题的用户在这里找到答案的可能性较小。请您的帖子直接合并相关文本,最好使用“复制+粘贴”以避免抄写错误。在以P开头的类型名中添加指针肯定是有史以来最糟糕的约定。@rubenvb:我倾向于同意您的看法,使用explicit*会更好,如本例所示。@rubenvb:约定的重要之处在于,它们的应用是一致的。这个是。由于您显然没有理解为什么指针有一个typedef,请不要忘记这是一个C API
PROCESS_INFORMATION pi;
PROCESS_INFORMATION pi{ 0 };