请教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"就好了。请问这究竟是怎么回事啊?
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
那么Delphi 定义中 去掉 packed
作者: zwjchina 发布时间: 2011-12-12
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28