【发布时间】:2017-05-05 18:29:30
【问题描述】:
所以我正在尝试让 NamedPipe IPC 项目正常工作,以便我的 C# GUI 可以与我的 C++ 代码进行通信,我应该提到我在 C++ 方面的深度不够片刻,虽然,在大多数情况下,我让它工作。
我这辈子都不知道如何“翻译”? C++ 侦听器接收到一个简单字符串和 MessageBox 的 chReply 缓冲区,我总是得到额外的 unicode 字符。我添加了我认为最重要的部分。
C# 管道写入
byte[] bReply = Encoding.Unicode.GetBytes("#TEST 123 456");
uint cbBytesWritten;
uint cbReplyBytes = (uint)bReply.Length;
bool bResult = PipeNative.WriteFile(hPipe, bReply, cbReplyBytes, out cbBytesWritten, IntPtr.Zero);
C++ 管道读取
// Project's Character Set: Unicode
// BUFFER_SIZE = 1024
TCHAR chRequest[BUFFER_SIZE];
DWORD cbBytesWritten, cbRequestBytes;
TCHAR chReply[BUFFER_SIZE];
DWORD cbBytesRead, cbReplyBytes;
cbReplyBytes = sizeof(TCHAR) * BUFFER_SIZE;
do
{
bResult = ReadFile(hPipe, chReply, cbReplyBytes, &cbBytesRead, NULL);
}
while(!bResult);
MessageBox(NULL, chReply, _T("GUI Request"), MB_OK);
如果有人能救我免于溺水,我将不胜感激。
【问题讨论】:
-
看起来
chReply不是以空值结尾的。 -
难以置信,我只需要用 +"\0" 来终止我的消息,谢谢大家!