[英]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.