Problema de paso de mensajes en la canalización VC++ (ejecución adicional de múltiples comandos)
HANDLE hChildStdinRd = NULL, hChildStdinWr = NULL,
hChildStdoutRd = NULL, hChildStdoutWr = NULL;
SECURITY_ATTRIBUTES sa;
sa. nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;
if (!CreatePipe (&hChildStdoutRd, &hChildStdoutWr, &sa , 0))
{
TRACE1("Creación de tubería fallida, %d\n", GetLastError());
Devuelve FALSO;
}
SetHandleInformation(hChildStdoutRd, HANDLE_FLAG_INHERIT, 0);
if (!CreatePipe(&hChildStdinRd, &.hChildStdinWr, &sa, 0))
{
TRACE1("Error en CreatePipe, %d\n", GetLastError());
CloseHandle(hChildStdoutRd);
CloseHandle(hChildStdoutWr);
Devuelve FALSE;
}
SetHandleInformation(hChildStdinWr, HANDLE_FLAG_INHERIT, 0);
CString strCmdLine //Establezca el comando usted mismo
p>PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION) );
ZeroMemory(&si, sizeof (STARTUPINFO) );
si.cb = sizeof(STARTUPINFO);
si.hStdError = hChildStdoutWr;
si.GetBuffer(strCmdLine.GetLength() + 1) , NULL, NULL, TRUE,
0, NULL, NULL, &si, &pi);
strCmdLine.ReleaseBuffer();
if ( ! bResult)
{
CloseHandle(hChildStdinRd);<
CloseHandle(hChildStdinWr);
CloseHandle(hChildStdoutRd);
CloseHandle(hChildStdoutWr);
Devuelve FALSO;
}
m_CmdLine.ReleaseBuffer();
Si (!
m_hChildProces
s = pi.hProcess;
CloseHandle(pi.hThread);
Devuelve FALSO. m_hChildProcess = pi.hProcess;
CloseHandle(pi.hThread);
CloseHandle(hChildStdinRd);
CloseHandle( hChildStdinWr);
CloseHandle(hChildStdoutWr);
hacer
{
bResult = ReadFile(hChildStdoutRd, pcRdBuff, BUFFER_SIZE, & amp;dwReadBytes, NULL);
if (!bResult)
{
break;
}
if (dwReadBytes == 0) p>
{
descanso;
}
// haceralgo
}mientras (1);
CloseHandle(hChildStdoutRd);
devuelve VERDADERO;