我有一个游戏的应用程序接口,它调用C++动态链接库中的方法,你可以通过修改动态链接库和调用某些方法来编写游戏的机器人。这很好,除了我不太喜欢C++,所以我决定使用命名管道,这样我就可以通过管道将游戏事件发送到客户端程序,并将命令发回-然后C++端只是一个简单的框架,用于在命名管道上发送侦听。
在C#方面,我有一些类似的方法:
private string Read()
{
byte[] buffer = new byte[4096];
int bytesRead = pipeStream.Read(buffer, 0, (int)4096);
ASCIIEncoding encoder = new ASCIIEncoding();
return encoder.GetString(buffer, 0, bytesRead);
}
private void Write(string message)
{
ASCIIEncoding encoder = new ASCIIEncoding();
byte[] sendBuffer = encoder.GetBytes(message);
pipeStream.Write(sendBuffer, 0, sendBuffer.Length);
pipeStream.Flush();
}在C++方面,有哪些等价的方法?
发布于 2010-01-14 18:49:36
创建管道并拥有管道句柄后,您可以使用ReadFile和MSDN进行读写:有关代码示例,请参阅WriteFile中的Named Pipe Client。
然而,我完全不知道如何使用它们。
我在上面引用的“命名管道客户端”部分给出了一个如何使用它们的示例。
例如,所有参数的类型是什么
所有参数的类型都在MSDN中定义:请参阅ReadFile和WriteFile
如何将可能从ReadFile方法接收到的字节缓冲区转换为字符串,反之亦然?
您将使用ASCIIEncoding发送字符串,因此您将收到一个非Unicode字符的字符串。
您可以使用std::string构造函数的重载将其转换为字符串,该构造函数接受指向字符缓冲区的指针和一个sencond参数,该参数指定缓冲区中有多少个字符:
//chBuf and cbRead are as defined in the
//MSDN "Named Pipe Client" example code fragment
std::string received((const char*)chBuf, cbRead);https://stackoverflow.com/questions/2063488
复制相似问题