2017-02-08 4 views
0

Я пытаюсь запустить процесс calc.exe с помощью CreateProcess(...).
Когда я строю решение, которое я получил ошибку:
'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

@Inpectable: Спасибо! Исправлена. :) –

Смежные вопросы