CreateProcess不会将命令行参数传递给新进程的主函数

时间:2014-08-01 01:33:34

标签: c++ visual-c++

我对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

2 个答案:

答案 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宏接受一个参数,这是一个字符串文字。

相关问题