我正在尝试通过命名管道传递结构,但在接收端,我无法获得char *
放置在structure
内的“地址”数据。使用WriteFile()
,ReadFile()
以下是要求:
谢谢大家
答案 0 :(得分:1)
您无法在系统之间移动指针。您的结构字段应该具有:
1)固定大小的字符数组:
struct {
/* ... */
char data[256];
};
2)结构末尾的可变大小的数据:
struct {
/* ... */
size_t size;
char data[0]; // data follows...
};
答案 1 :(得分: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);
注意:这不是一个好的,可移植的和有效的方法。这只是一种做法。