2017-02-08 7 views
0

CreateProcess(...)でcalc.exeプロセスを開始しようとしています。
私はエラーを受け取ったソリューション構築しています:私はなぜ理解していないのです宣言されていない識別子ビルドエラーのためにCreateProcessを使用できません: 'STARTUPINFO':宣言されていない識別子

enter image description here


'STARTUPINFO' を。
エラーは、ソリューションを構築し、変数が定義されている場合にのみ発生します。
それはとして表示され、変数に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

lookには '/ showIncludes' clオプションを使用します。実際にはどのファイルが含まれています。 'STARTUPINFO'が定義されているファイルが含まれていることを確認してください。これはいくつかの '#if'ブロックで定義されています。あなたはこのブロックに入っていますか? – RbMm

+0

_ [STARTUPINFO](https://msdn.microsoft.com/en-us/library/windows/desktop/ms686331(v=vs.85).aspx)のMSDNページをご覧ください_ – ryyker

+0

@ryyker - だから何? – RbMm

答えて

3

あなたはすべての#include "stdafx.h"最初を配置する必要があります。

または、プロジェクト設定でプリコンパイル済みヘッダーをオフにして、標準C++の前処理動作を取得します。

プリコンパイル済みヘッダーの場合、プリコンパイル済みヘッダーのインクルードまでのすべて(この場合は"stdafx.h")は無視されます。


あなたの状況についての警告があります。ここではインクルードは無視されます。プリコンパイルされたヘッダーを一般的に使用する場合は、その警告番号を見つけてエラーとして扱うように指定する必要があります。

+0

ありがとう!エラーからシンプルで不明確です。私は '#include" stdafx.h "を最初に移動して動作させました。 – E235

+0

プリコンパイルされたヘッダーファイルは、ユーザー提供のヘッダーファイルを通じて生成されます。そのため、正しい構文は '#include" stdafx.h "'であり、 '#include 'ではありません。 – IInspectable

+0

@IInspectable:ありがとう!一定。 :) –

関連する問題