2017-02-08 60 views
0

我正试图用CreateProcess(...)启动进程calc.exe。
当我建立我收到了错误的解决方案:
'STARTUPINFO':未声明的标识符由于构建错误而无法使用CreateProcess:'STARTUPINFO':未声明的标识符

enter image description here

我不理解为什么。
该错误仅在构建解决方案和定义变量时出现。
当它出现的变量按F12
enter image description here

也许这关系到#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; 
} 
+0

使用'/ showIncludes'cl选项来查看,实际包含哪些文件。检查该文件,其中包含“STARTUPINFO”。看,这是在一些'#if'块中定义的。检查你是否在这个模块 – RbMm

+0

阅读MSDN页面_ [STARTUPINFO](https://msdn.microsoft.com/en-us/library/windows/desktop/ms686331(v = vs.85).aspx)_ – ryyker

+0

@ryyker - 那又如何? – RbMm

回答

3

你需要把所有的#include "stdafx.h"第一

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

预编译头文件包含预编译头文件(在您的情况下为"stdafx.h")将被忽略。


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

+0

谢谢!从错误中如此简单和不清楚。我移动了#include stdafx.h成为第一个,现在它工作。 – E235

+0

预编译头文件是通过用户提供的头文件生成的。因此,正确的语法是'#include“stdafx.h”',而不是'#include '。 – IInspectable

+0

@IInspectable:谢谢!固定。 :) –

相关问题