Получение ошибок C2065 при попытке запустить программу дочернего процесса В C ++ с использованием Visual Studio 2017 - PullRequest
0 голосов
/ 15 октября 2018

Это простая программа.его цель - просто снова запустить себя, показывая свой системный идентификатор процесса и свое местоположение в списке процессов.Вот код:

#include <Windows.h>
#include <stdio.h>
#include "pch.h"
#include <iostream>
using namespace std;

void StartClone(int nCloneID)
{
   // extract the file name used for the current 
   //executable file
   TCHAR szFilename[MAX_PATH];
   GetModuleFileName(NULL, szFilename, MAX_PATH);

   // Format the command line for the child process 
   //and notify its EXE filename and clone ID
   TCHAR szCmdLine[MAX_PATH];
   sprintf(szCmdLine, "\"%s\" %d", szFilename, nCloneID);

   // STARTUPINFO structure for child processes
   STARTUPINFO si;
   ZeroMemory(&si, sizeof(si));
   // must be the size of this structure
   si.cb = sizeof(si);                            
   // returned process information for the child process
   PROCESS_INFORMATION pi;

   // Create processes using the same executable and command line, and 
   //assign the nature of their child processes
   BOOL bCreateOK = ::CreateProcess(
     szFilename,             // The name of the application that generated the EXE      

    szCmdLine,                  // tell the flag that behaves like a child process
    NULL,                       // default process security
    NULL,                       // default thread safety
    FALSE, // does not inherit the handle
    CREATE_NEW_CONSOLE,         // use the new console
    NULL,                       // new environment
    NULL,                       // Current directory
    &si,                        // start information
    &pi);                       // returned process information

// release the reference to the child process
if (bCreateOK)
{
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
}
}

int main(int argc, char* argv[])
{
// Determine the number of processes derived, and the location of the derived process in the process list
int nClone = 0;
// Modify the statement : int nClone;

//First modification: nClone=0;
if (argc > 1)
{
    // Extract the clone ID from the second parameter
    ::sscanf(argv[1], "%d", &nClone);

}

//Second modification: nClone=0;

// Show the process location
    std::cout << "Process ID:" << ::GetCurrentProcessId()
    << ", Clone ID:" << nClone
    << std::endl;


// Check if there is a need to create a child process
    const int c_nCloneMax = 5;
if (nClone < c_nCloneMax)
{
    // Send the command line and clone number of the new process
    StartClone(++nClone);
}

// Wait for the response keyboard input to end the process
   getchar();
   return 0;
}

Но когда я компилирую его, я получаю так много ошибок, некоторые из них

Error   C2065   'TCHAR': undeclared identifier  OS_EX2-1
Error   C2146   syntax error: missing ';' before identifier 'szFilename'        
Error   C2065   'MAX_PATH': undeclared identifier   OS_EX2-1        

И в Visual Studio 2010 не работает никаких проблем.мы просто настраиваем свойство «Набор символов» на «Не установлено».Есть ли кто-нибудь, у кого есть идея?Большое спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...