我现在要用createprocess来调用cl.exe编译c:\aa.c文件,并且把编译过程中的错误信息传出来,
请问我该怎么设置createprocess参数.
              希望各位大虾多多指教哦,先谢过了!
CreateProcess(NULL,   "",   NULL,   NULL,   FALSE,   0,   NULL,   NULL,   &si,   &pi);   

解决方案 »

  1.   

    http://baike.baidu.com/view/697167.htm
      

  2.   

    去查该函数后面两个参数的结构体的具体意义,
      主要就是&si的设置,
      

  3.   

    多年前我写的一个函数,你可以参考一下:bool ExecuteApp(const char *cmdLine, DWORD &exitCode, string &resStr)
    {
    resStr = "";
    exitCode = -1;

    SECURITY_ATTRIBUTES saPipe;
    saPipe.nLength = sizeof(SECURITY_ATTRIBUTES);
    saPipe.lpSecurityDescriptor = NULL;
    saPipe.bInheritHandle = TRUE;

    HANDLE hReadPipe, hWritePipe;
    if (CreatePipe(&hReadPipe, &hWritePipe, &saPipe, 0) == 0)
    return false; SECURITY_ATTRIBUTES sa;
    ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
    sa.bInheritHandle = TRUE;
    STARTUPINFO startupInfo;
    ZeroMemory(&startupInfo, sizeof(STARTUPINFO));
    startupInfo.cb = sizeof(STARTUPINFO);
    startupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
    startupInfo.hStdError = hWritePipe;
    startupInfo.hStdOutput = hWritePipe;
    PROCESS_INFORMATION processInfo;

    char *cmdStr = new char[strlen(cmdLine) + 1];
    strcpy(cmdStr, cmdLine);
    if (CreateProcess(NULL, cmdStr, &sa, &sa, TRUE, 0, NULL, NULL, &startupInfo, &processInfo))
    {
    WaitForSingleObject(processInfo.hProcess, INFINITE);
    GetExitCodeProcess(processInfo.hProcess, &exitCode);
    CloseHandle(hWritePipe);
    char buf[256];
    DWORD num = 0;
    while (ReadFile(hReadPipe, buf, sizeof(buf) - 1, &num, NULL))
    {
    buf[num] = '\0';
    resStr += buf;
    }
    CloseHandle(hReadPipe);
    }
    else
    {
    CloseHandle(hWritePipe);
    CloseHandle(hReadPipe);
    // ShowWinError();
    delete []cmdStr;
    exitCode = GetLastError();
    return false;
    }

    delete []cmdStr;
    CloseHandle(processInfo.hThread);
    CloseHandle(processInfo.hProcess);

    return true; 
    }