让命名管道在 C++ 和 .NET 之间工作让我经历了一段非常艰难的时期。 我在创建可在 2 个 c++ 应用程序或 2 个 .NET 应用程序之间工作的命名管道时没有遇到任何问题。
最佳答案
我对这种沟通没有问题,我在一些项目中使用了这个场景。
C++ 方面:
LPTSTR lpszPipename = TEXT("\\\\.\\pipe\\pipename");
CHAR chReadBuf[1024];
DWORD cbRead;
BOOL fResult;
fResult = CallNamedPipe(
lpszPipename, // pipe name
_Message, // message to server
strlen(_Message), // message length
chReadBuf, // buffer to receive reply
sizeof(chReadBuf), // size of read buffer
&cbRead, // number of bytes read
NMPWAIT_WAIT_FOREVER); // wait;-)
在 C# 端:
public string GetMessageFromPipe()
{
int _lenght = 0;
/*
* Pipe Control Block
*/
_pipeserver.WaitForConnection();
do
{
_lenght += _pipeserver.Read(_buffer, _lenght, _buffer.Length);
}
while (!_pipeserver.IsMessageComplete);
_pipeserver.Disconnect();
/*
* End of Pipe Control Block
*/
if (_lenght == 0)
{
throw new ArgumentException("Message is empty ;-(");
}
return Encoding.UTF8.GetString(_buffer, 0, _lenght);
}
管道创建:
_pipeserver = new NamedPipeServerStream("pipename",
PipeDirection.InOut, 254, PipeTransmissionMode.Message,
PipeOptions.Asynchronous, 262144, 262144);
关于.net - 如何使命名管道在 C++ 和 .NET 之间工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4961164/