我刚做了一个非常艰难的时间去命名管道C ++和.NET之间的合作。 我没有问题创造2 C ++应用程序之间的工作,或2 .NET应用程序之间的命名管道。
I just had a really tough time making Named Pipes work between c++ and .NET. I had no problems creating Named Pipes that worked between 2 c++ apps, or between 2 .NET apps.
我没有问题,这个沟通,我用这个方案在某些项目中。
I dont have problem with this communication, i use this scenario in some project.
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#中端:
At C# side:
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);