Red de conocimiento informático - Problemas con los teléfonos móviles - Problema de paso de mensajes en la canalización VC++ (ejecución adicional de múltiples comandos)

Problema de paso de mensajes en la canalización VC++ (ejecución adicional de múltiples comandos)

Creo que estos códigos son lo que necesitas.

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)

{

descanso;

}

// haceralgo

}mientras (1);

CloseHandle(hChildStdoutRd);

devuelve VERDADERO;