+ -
当前位置:首页 → 问答吧 → 请教VC++中的结构体指针,用delphi封装后是不是会退化成字符串指针?

请教VC++中的结构体指针,用delphi封装后是不是会退化成字符串指针?

时间:2011-12-12

来源:互联网

如题。比如:VC++中这样定义的结构体:
typedef struct
{
  void *content;
  unsigned char flags;
  unsigned char vsm_size;
  unsigned char vsm_data [ZMQ_MAX_VSM_SIZE];
} zmq_msg_t;

在delphi中我给它这样封装的:
 zmq_msg_t=packed record
  content:Pointer;
  flags:Byte;
  vsm_size:Byte;
  vsm_data:array[0..29] of Byte;
end;

由于我在delphi下调用VC++生成的动态链接库,其中动态链接库中的函数涉及到zmq_msg_t*类型。在delphi下我把zmq_msg_t *msg写成 var msg: zmq_msg_t,但是我发现在使用的时候,程序把zmq_msg_t的指针类型直接默认为pchar类型了,请问这是为为什么啊?
比如:我接收到第一条消息"This is the workload!",然后接收第二条消息“A”,但是我发现第二条消息打印出来是“Ahis is the workload!",即,第二条消息只是把第一个字节替换了,我要的结果是里面存储的只是"A"就好了。请问这究竟是怎么回事啊?

作者: jilaoyun   发布时间: 2011-12-12

pchar类型只是说明了指针类型,你就可以按照char的长度读取指定的字节数就是了

作者: bdmh   发布时间: 2011-12-12

content的长度是不定的,所以,也没法定vsm_data是从哪开始的啊?

作者: jilaoyun   发布时间: 2011-12-12

是你自己 “A”后面没带结束符的原因吧...

作者: okmnjizc   发布时间: 2011-12-12

'A'是这样定义的: identity:pAnsichar; identity:='A';

作者: jilaoyun   发布时间: 2011-12-12

如果VC采用的默认对齐方式
那么Delphi 定义中 去掉 packed 

作者: zwjchina   发布时间: 2011-12-12