如题。比如: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"就好了。请问这究竟是怎么回事啊?

解决方案 »

  1.   

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

  2.   

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

  3.   

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

  4.   

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

  5.   

    在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;
    这样试试。