簡體   English   中英

在C ++中將結構數據類型傳遞給命名管道

[英]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_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
};

在這里,您基本上有一個固定的標頭部分,所有字符串都以字節結尾存儲。 您可以通過以適當的偏移量訪問緩沖區來找到字符串的開頭。 您需要在管道的每一端進行編組代碼以與EventLogEntrymywiredata結構進行相互轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM