首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进程间通信

进程间通信
EN

Stack Overflow用户
提问于 2010-01-14 18:39:50
回答 1查看 815关注 0票数 1

我有一个游戏的应用程序接口,它调用C++动态链接库中的方法,你可以通过修改动态链接库和调用某些方法来编写游戏的机器人。这很好,除了我不太喜欢C++,所以我决定使用命名管道,这样我就可以通过管道将游戏事件发送到客户端程序,并将命令发回-然后C++端只是一个简单的框架,用于在命名管道上发送侦听。

在C#方面,我有一些类似的方法:

代码语言:javascript
复制
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++方面,有哪些等价的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-14 18:49:36

创建管道并拥有管道句柄后,您可以使用ReadFile和MSDN进行读写:有关代码示例,请参阅WriteFile中的Named Pipe Client

然而,我完全不知道如何使用它们。

我在上面引用的“命名管道客户端”部分给出了一个如何使用它们的示例。

例如,所有参数的类型是什么

所有参数的类型都在MSDN中定义:请参阅ReadFileWriteFile

如何将可能从ReadFile方法接收到的字节缓冲区转换为字符串,反之亦然?

您将使用ASCIIEncoding发送字符串,因此您将收到一个非Unicode字符的字符串。

您可以使用std::string构造函数的重载将其转换为字符串,该构造函数接受指向字符缓冲区的指针和一个sencond参数,该参数指定缓冲区中有多少个字符:

代码语言:javascript
复制
//chBuf and cbRead are as defined in the
//MSDN "Named Pipe Client" example code fragment
std::string received((const char*)chBuf, cbRead);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2063488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档