首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-02-25 
请教VC++中的结构体指针,用delphi封装后是不是会退化成字符串指针?如题。比如:VC++中这样定义的结构体:type

请教VC++中的结构体指针,用delphi封装后是不是会退化成字符串指针?
如题。比如: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"就好了。请问这究竟是怎么回事啊?

[解决办法]
pchar类型只是说明了指针类型,你就可以按照char的长度读取指定的字节数就是了
[解决办法]
是你自己 “A”后面没带结束符的原因吧...
[解决办法]
如果VC采用的默认对齐方式
那么Delphi 定义中 去掉 packed 


[解决办法]
在delphi中我给它这样封装的:
type
 zmq_msg_t= record
content:Pointer;
flags:Byte;
vsm_size:Byte;
vsm_data:array[0..29] of Byte;
end;
msg = ^zmq_msg_t;
这样试试。

热点排行