gpt4 book ai didi

c++ - 将结构数据类型传递给 C++ 中的命名管道

转载 作者:行者123 更新时间:2023-11-30 03:22:25 24 4
gpt4 key购买 nike

我找到了一个示例程序,它通过命名管道将字符串从客户端传递到服务器。如何在 C++ 中通过命名管道传递结构数据类型?

客户端的 WriteFile 函数如下所示:

WriteFile(hPipe,TEXT("Hello Pipe\n"),12,&dwWritten,NULL);

服务器的ReadFile函数如下所示:

while (ReadFile(hPipe, buffer, sizeof(buffer)-1, &dwRead, NULL))

我需要传递的结构如下所示:

struct EventLogEntry 
{
string date;
string time;
string subsystem;
unsigned long eventType;
string majorFunction;
string messageText;
unsigned long timeStamp; //Added for TimeZone Corrections
};

CreateNamedPipe() 中,我正在使用 PIPE_TYPE_BYTE PIPE_READMODE_BYTE 管道模式。我是否需要将它们更改为 PIPE_TYPE_BYTEPIPE_READMODE_MESSAGE

最佳答案

您不能通过线路传递类的实例。

你基本上有两个选择。

A) 使用固定大小的缓冲区:

struct mydata {
char message[200];
char name[50];
int time;
};

然后通过管道发送 sizeof(mydata)

B) 以不同的格式编码数据:

struct mywiredata {
int messageoffset;
int nameoffset;
int time;
char buffer[ANYSIZE_ARRAY]; //blogs.msdn.microsoft.com/oldnewthing/20040826-00/?p=38043
};

这里基本上有一个固定的 header 部分,所有字符串都存储为末尾的字节。您可以通过在适当的偏移量处访问缓冲区来找到字符串的开头。您需要在管道的每一端编码代码以转换为您的 EventLogEntrymywiredata 结构。

关于c++ - 将结构数据类型传递给 C++ 中的命名管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51170607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com