문제해결

[IPC] C#-C++ 간 Named Pipe 연결시 겪은 문제 2가지

꼬기를꼬깃꼬깃 2023. 3. 13. 14:49

1. Pipe 연결 안됨(ERROR_FILE_NOT_FOUND)

C#의 NamedPipeServerStream와 C++의 CreateFile에서 사용하는 Pipe 이름이 다르다.
C#에서 "PipeName"라면, C++에서는 "\\.\pipe\PipeName"으로 사용한다.

별 거 아닌 차이점인데 모르면 왜 안되지 하면서 끝까지 알 수 없음
GetLastError() 찍어보면 2(ERROR_FILE_NOT_FOUND)가 나온다.
이름이 다르니까 당연한 오류인데, 모르니까 C#-C++이라서 서로 연결이 안되나하고 고민하는 순간 망함

2. 전달 메시지 짤림

C#에서 StreamReader를 사용해서 값을 읽어오는데 계속 첫글자만 읽힘
NamedPipeServerStream에 Read()로 바이트를 바로 읽어오면 해결

cbBytesRequest = CIpc.bufSize;
cbBytesRead = server.Read(bRead, 0, cbBytesRequest);
strMessage = Encoding.Unicode.GetString(bRead).TrimEnd('');

 

그리고 문제가 해결되면 눈에 보이는 예제 코드...
https://github.com/sovprene/named-pipe-examples

반응형