1

char *名前付きパイプを介して構造を渡そうとしていますが、受信側で、内部に配置されている「アドレス」データを取得できませんstructure。を使用する場合WriteFile()ReadFile() 次の要件があります。

  1. structure に常駐する char ポインターを渡します。
  2. ネットワークを介してシステム間で通信したい

皆さん、ありがとうございました

4

2 に答える 2

1

システム間でポインターを移動することはできません。構造体フィールドには次のいずれかが必要です。

1) 固定サイズの char 配列:

struct {
  /* ... */
  char data[256]; 
};

2) 構造体の末尾にある可変サイズのデータ​​:

struct {
  /* ... */
  size_t size;
  char data[0]; // data follows...
};
于 2012-07-24T07:28:40.147 に答える
0

どちらかの端で構造をシリアライズ/デシリアライズする必要があります。C および C++ を使用している場合 - ReadFile/WriteFile がこれらの言語のいずれかにあることを思い出せません) は、それ自体の構造のシリアル化をサポートしていないため、コードを記述する必要があります。

したがって

struct { int a; int b; char *c; } s;
fwrite(pipe, &s.a, sizeof(a));
fwrite(pipe, &s.b, sizeof(a));
int c = strlen(s.c);
fwrite(pipe, &c, sizeof(c));
fwrite(pipe, s.c, c);

注: これは、これを実行するための、移植性が高く回復力のある優れた方法ではありません。それはただの方法です。

于 2012-07-24T07:31:21.150 に答える