CreateProcess не передает аргумент командной строки в основную функцию нового процесса

У меня есть вопрос о функции CreateProcess. Пожалуйста, смотрите мои cpp файлы ниже.

//CreateProcess.cpp

#include <stdio.h>
#include <tchar.h>
#include <Windows.h>

#define DIR_LEN MAX_PATH+1

int _tmain(int argc, TCHAR* argv[])
{
    STARTUPINFO si = {0};
    PROCESS_INFORMATION pi;

    si.cb = sizeof(si);
    si.dwFlags = STARTF_USEPOSITION | STARTF_USESIZE;
    si.dwX = 100;
    si.dwY = 200;
    si.dwXSize = 300;
    si.dwYSize = 200;
    si.lpTitle = _T("I am a hummingat");
    TCHAR command[] = _T("AdderProcess.exe AA BB");
    TCHAR cDir[DIR_LEN];
    BOOL state;

    GetCurrentDirectory(DIR_LEN, cDir);
    _fputts(cDir, stdout);
    _fputts(_T("\n"), stdout);

    SetCurrentDirectory(_T("C:\\WinSystem"));

    GetCurrentDirectory(DIR_LEN, cDir);
    _fputts(cDir,stdout);
    _fputts(_T("\n"),stdout);

    state = CreateProcess (
        NULL,
        command,
        NULL, NULL, TRUE,
        CREATE_NEW_CONSOLE,
        NULL, NULL, &si, &pi
        );

    if(state !=0)
        _fputts(_T("Creation OK! \n"), stdout);
    else
        _fputts(_T("Creation Error! \n"), stdout);

    _fgettchar();
    return 0;
}


//AdderProcess.cpp

#include <stdio.h>
#include <tchar.h>
#include <Windows.h>

int _tmain( int argc, TCHAR* argv[])
{
    _tprintf( _T ("%s\n", argv[1]));
    _tprintf( _T ("%s\n", argv[2]));

    DWORD val1, val2;
    val1 = _ttoi(argv[1]);
    val2 = _ttoi(argv[2]);

    _tprintf( _T("%d + %d = %d\n", val1, val2, val1+val2));

    _gettchar();

    return 0;
}

это было нормально, что создание окон консоли AdderProcess после того, как я открыл CreateProcess.exe. но есть проблема с передачей аргументов основной функции. argv[1], argv[2]

это экран результатов выполнения AdderProcess.exe,

<null>
<null>
0 + 0 = 234234324 <- trash value

я не знаю причину, почему CreateProcess.exe не может передать аргументы AdderProcess.exe

2 ответа

Решение

Кажется, ОП не совсем понял, почему возникла проблема. Причиной является неправильное использование _T макро.

Вместо этого:

_tprintf( _T ("%d + %d = %d\n", val1, val2, val1+val2));

Должно быть так:

_tprintf( _T("%d + %d = %d\n"), val1, val2, val1+val2);

Такая же ошибка появляется во всех других строках _tmain это использование _T, _T макрос принимает один аргумент, и это строковый литерал.

Посмотрите внимательно на это из своего кода:

_tprintf( _T ("%d + %d = %d\n", val1, val2, val1+val2));

Вы видите что-то не так с этим?

Я просто обращаю ваше внимание на одну ошибку, так как вы фактически просите читателей отладить вашу программу для вас.


относительно

Я не знаю причину, почему CreateProcess.exe не может передать аргументы AdderProcess.exe

сборка, в которой виновата программа CreateProcess.exe, не обязательно оправдана. Ошибки во второй программе означают, что у вас нет реальных данных. Еще.

Другие вопросы по тегам