使用CreatePipe遇到的有关问题

使用CreatePipe遇到的问题?
本帖最后由 VisualEleven 于 2013-08-29 13:33:10 编辑
我是想把控制台程序的文字输出到一个文本框中,在命令行中执行"Fc.exe /?" 或 "Tdump.exe"(BCB60中的一个工具)时输出不正常,但这两个程序在VC6 IDE的工具菜单下面配置工具,都能正常输出,下面是代码:
-----------------------------------

   
 HANDLE hStdOutRd, hStdOutWr;

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

    if (!CreatePipe(&hStdOutRd, &hStdOutWr, &sa, 0))
        return;

    PROCESS_INFORMATION pi;
    STARTUPINFO si;
    memset(&si, 0, sizeof(si));

    si.dwFlags = STARTF_USESTDHANDLES;
    si.hStdOutput = hStdOutWr;
    si.hStdError = hStdOutWr;

    BOOL bRet = CreateProcess(NULL, "Fc.exe /?", NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
    if (!bRet)
    {
        CloseHandle(hStdOutWr);
        CloseHandle(hStdOutRd);
        return;
    }
    else
    {
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
    }

    CloseHandle(hStdOutWr);

    TCHAR szBuf[4096];
    DWORD dwReadBytes;

    while (ReadFile(hStdOutRd, szBuf, 4095, &dwReadBytes, NULL))
    {
        szBuf[dwReadBytes] = '\0';
m_ctlEdit.SelSel(-1, -1);
m_ctlEdit.ReplaceSel(szBuf);
    }

    CloseHandle(hStdOutRd);

文章评论