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, не обязательно оправдана. Ошибки во второй программе означают, что у вас нет реальных данных. Еще.