读书人

使用CreatePipe遇到的有关问题

发布时间: 2013-09-09 20:31:09 作者: rapoo

使用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);


[解决办法]
好像没问题。。。把CreateProcess第一个参数改成控制台程序绝对路径试试。第二个放参数、、、
[解决办法]
学习中。。。顶下。。。

感觉应该跟参数有关系
[解决办法]
要使用cmd来完成

如下命令,将内容输出到 e:\b.txt文件中
cmd.exe /c fc.exe /? > "e:\b.txt"


调用:


CString cstrSaveFilePath("e:\b.txt");//<---设置保存内容的文件全路径
ShellExecute(NULL, _T("open"), _T("cmd.exe"), _T("/C Fc.exe /? > \"") + cstrSaveFilePath+ _T("\""), NULL, SW_HIDE);

[解决办法]
使用CreateProcess时类似,运行的cmd.exe,参数传在控制台里输入的内容,注意路径要用""包起来
[解决办法]
CreateProcess函数的第二个参数在PC平台是LPTSTR,不是LPCTSTR,,WinCE平台下才是LPCTSTR

读书人网 >VC/MFC

热点推荐