Pessoal, tenho uma aplicação C++ que cria o namedpipe uma C# que se conecta a ele.
Meu C++ (servidor) tanto escuta nesse pipe quanto escreve, pois seria uma comunicação de 2 vias.
O problema principal é que ao C++ escrever para enviar para o C#, a thread de leitura é executada, e acontece erro de violação.
Criação do pipe:
hPipe = CreateNamedPipe (lpszPipename,
PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,// read/write access
PIPE_TYPE_MESSAGE | // message type pipe
PIPE_READMODE_MESSAGE | // message-read mode
PIPE_WAIT, // blocking mode
PIPE_UNLIMITED_INSTANCES, // max. instances
BUFSIZE, // output buffer size
BUFSIZE, // input buffer size
PIPE_TIMEOUT, // client time-out
NULL); // no security attribute
Escrita no pipe:
WriteFile(hPipe, buf, 100, &cbWritten, NULL);
Assim que escrevo, minha thread de leitura sai da linha de leitura que estava presa:
// aguarda recebimento de msg
sucessoLeitura = ReadFile (hPipe,
chRequest,
BUFSIZE,
&cbBytesRead,
NULL);
chRequest[cbBytesRead] = '\0';
Neste momento tenho um erro de memória pois o cbBytesRead tem muitos bytes.
A mensagem chega corretamente no aplicativo C#, porem o C++ trava por essa violação de memória.
Acredito que o problema seja ele estar lendo ele mesmo.
Alguma ideia de como isso pode ser resolvido?
Agradeço desde já.