2017-02-08 81 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:謝謝!固定。 :) –

相關問題