请高手帮忙:如何读取管道?
24ge 2003-12-18 10:51:54 我看了一篇vc关于管道的帖子,我想将dos窗口显示的内容通过管道显示到memo中,以下程序创建管道和进程成功,并已经写入管道,但是读不出来。请高手帮忙看看:
HANDLE hRead,hWrite;
SECURITY_ATTRIBUTES sa;
AnsiString appname=".\\masm5\\masm clu.asm";
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
ShowMessage("Fatal Error: Create pipe error!");
return;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_SHOW; //hide
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
if (!CreateProcess(NULL,appname.c_str(),NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
ShowMessage("Error on CreateProcess()");
return;
}
CloseHandle(hWrite);
char buffer[4096];
DWORD bytesRead;
while (true)
{
if (ReadFile(hRead,&buffer,4096,&bytesRead,NULL) == NULL)
break;
Memo1->Text += buffer;
Application->ProcessMessages();
Sleep(200);
}