我对CreateProcess功能有一些疑问。 请看我的cpp文件beblow。
//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;
}
打开CreateProcess.exe后创建AdderProcess控制台窗口是可以的。 但它有关于传递主函数参数的问题。 argv [1],argv [2]
这是AdderProcess.exe执行结果屏幕,
<null>
<null>
0 + 0 = 234234324 <- trash value
我不知道为什么CreateProcess.exe无法将参数传递给AdderProcess.exe
答案 0 :(得分:0)
从您的代码中仔细查看:
_tprintf( _T ("%d + %d = %d\n", val1, val2, val1+val2));
你觉得它有什么问题吗?
我只是将您的注意力集中在一个错误上,因为您有效地要求读者为您调试程序。
关于
“我不知道为什么CreateProcess.exe无法将参数传递给AdderProcess.exe
CreateProcess.exe程序应该受到责备的声明,不一定得到保证。第二个程序中的错误意味着您没有真正的数据。爱好。
答案 1 :(得分:0)
似乎OP并不能解决问题发生的原因。原因是误用了_T
宏。
而不是:
_tprintf( _T ("%d + %d = %d\n", val1, val2, val1+val2));
应该是这样的:
_tprintf( _T("%d + %d = %d\n"), val1, val2, val1+val2);
使用_tmain
的{{1}}中的所有其他行中都会显示相同的错误。 _T
宏接受一个参数,这是一个字符串文字。