【问题标题】:Can't use CreateProcess because of a build error: 'STARTUPINFO': undeclared identifier由于构建错误,无法使用 CreateProcess:“STARTUPINFO”:未声明的标识符
【发布时间】:2017-02-08 13:27:59
【问题描述】:

我正在尝试使用 CreateProcess(...) 启动进程 calc.exe。
在构建解决方案时,我收到错误:
'STARTUPINFO': undeclared identifier

我不明白为什么。
该错误仅在构建解决方案并且变量看起来已定义时出现。
在变量上按 F12 时,它会显示为:

也许它与#ifdef UNICODE 有关?

完整代码:

// 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;
}

【问题讨论】:

  • 使用/showIncludes cl 选项查看实际包含的文件。检查该文件,其中定义了STARTUPINFO。看看这是在某些#if 块中定义的。检查你是否进入这个街区
  • 阅读 MSDN 页面 STARTUPINFO
  • @ryyker - 那又怎样?
  • @RbMm - 它描述了了解如何使用 STARTUPINFO 结构所需的一切。除此之外,您已经在#defines 上提供了提示。
  • @ryyker - 从中​​得到什么?但是已经在#include "stdafx.h" 中查看了该错误不是第一个干杯和hth。 - 阿尔夫在这里。 msdn 这里无关

标签: c++ c winapi createprocess


【解决方案1】:

您需要将#include "stdafx.h"放在首位

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

对于预编译的标头,包含预编译标头(在您的情况下为 "stdafx.h")之前的所有内容都将被忽略。


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

【讨论】:

  • 谢谢!如此简单,从错误中不清楚。我将#include "stdafx.h" 移动为第一个,现在它可以工作了。
  • 预编译头文件是通过用户提供的头文件生成的。因此,正确的语法是#include "stdafx.h",而不是#include &lt;stdafx.h&gt;
  • @IInspectable:谢谢!固定的。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
  • 2014-08-04
  • 2020-05-05
  • 2019-09-29
相关资源
最近更新 更多