[英]Passing struct data type to named pipes in C++
我找到了一个示例程序,该程序在命名管道中将字符串从客户端传递到服务器。 如何在C ++中通过命名管道传递struct数据类型?
客户端的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_BYTE
和PIPE_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
};
在这里,您基本上有一个固定的标头部分,所有字符串都以字节结尾存储。 您可以通过以适当的偏移量访问缓冲区来找到字符串的开头。 您需要在管道的每一端进行编组代码以与EventLogEntry
和mywiredata
结构进行相互转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.