C++ 无法使用CreateProcess,因为生成错误:“STARTUPINFO”:未声明的标识符

C++ 无法使用CreateProcess,因为生成错误:“STARTUPINFO”:未声明的标识符,c++,c,winapi,createprocess,C++,C,Winapi,Createprocess,我正在尝试使用CreateProcess…启动进程calc.exe。。。。 在构建解决方案时,我收到错误: “STARTUPINFO”:未声明的标识符 我不明白为什么。 只有在生成解决方案且变量看起来已定义时,才会出现错误。 按F12键时,变量显示为: 可能与ifdef UNICODE有关 完整代码: 首先,您需要将include stdafx.h放入 或者在项目设置中关闭预编译头以获得标准C++的预处理行为 对于预编译头,将忽略预编译头(在您的示例中是stdafx.h)包含的所有内容 有一个

我正在尝试使用CreateProcess…启动进程calc.exe。。。。 在构建解决方案时,我收到错误: “STARTUPINFO”:未声明的标识符

我不明白为什么。 只有在生成解决方案且变量看起来已定义时,才会出现错误。 按F12键时,变量显示为:

可能与ifdef UNICODE有关

完整代码:

首先,您需要将include stdafx.h放入

或者在项目设置中关闭预编译头以获得标准C++的预处理行为

对于预编译头,将忽略预编译头(在您的示例中是stdafx.h)包含的所有内容

有一个关于您的情况的警告,其中包含被忽略。如果您想在一般情况下使用预编译头,您应该找到该警告号,并指定它应被视为错误。

您首先需要放入include stdafx.h

或者在项目设置中关闭预编译头以获得标准C++的预处理行为

对于预编译头,将忽略预编译头(在您的示例中是stdafx.h)包含的所有内容


有一个关于您的情况的警告,其中包含被忽略。如果您想在一般情况下使用预编译头,您应该找到该警告号,并指定将其视为错误。

使用/showcludes cl选项查看实际包含的文件。检查是否包含定义STARTUPINFO的文件。看,这是在一些if块中定义的。检查您是否进入该区块阅读@Ryker上的MSDN页面-然后呢?@RbMm-它描述了了解如何使用STARTUPINFO结构所需的一切。除此之外,您已经提供了关于定义的提示。@Ryker-这是什么?但是已经在包括stdafx.h而不是first Cheers和hth中看到了这个错误阿尔夫就在这里。msdn此处unrelateduse/showIncludes cl选项用于查找实际包含的文件。检查是否包含定义STARTUPINFO的文件。看,这是在一些if块中定义的。检查您是否进入该区块阅读@Ryker上的MSDN页面-然后呢?@RbMm-它描述了了解如何使用STARTUPINFO结构所需的一切。除此之外,您已经提供了关于定义的提示。@Ryker-这是什么?但是已经在包括stdafx.h而不是first Cheers和hth中看到了这个错误阿尔夫就在这里。这里是msdn,谢谢!从错误中可以看出,这很简单,也很不清楚。我将include stdafx.h作为第一个,现在它可以工作了。预编译头文件是通过用户提供的头文件生成的。因此,正确的语法是include stdafx.h,而不是include。@IInspectable:谢谢!固定的谢谢从错误中可以看出,这很简单,也很不清楚。我将include stdafx.h作为第一个,现在它可以工作了。预编译头文件是通过用户提供的头文件生成的。因此,正确的语法是include stdafx.h,而不是include。@IInspectable:谢谢!固定的
// CppConsoleApp.cpp : Defines the entry point for the console application.
//

#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include "stdafx.h"

int main()
{
    STARTUPINFO info;
    PROCESS_INFORMATION processInfo;
    ZeroMemory(&info, sizeof(info));
    info.cb = sizeof(info);
    ZeroMemory(&processInfo, sizeof(processInfo));

    LPCWSTR path = L"C:\\Windows\\System32\\calc.exe";

    if (!CreateProcess(path, NULL, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo))
    {
        printf("CreateProcess failed (%d).\n", GetLastError());
    }

    WaitForSingleObject(processInfo.hProcess, INFINITE);
    CloseHandle(processInfo.hProcess);
    CloseHandle(processInfo.hThread);

    return 0;
}