这个vc结构体是这样的:
typedef struct
{
void *content;
unsigned char flags;
unsigned char vsm_size;
unsigned char vsm_data [ZMQ_MAX_VSM_SIZE];
} zmq_msg_t;其中,ZMQ_MAX_VSM_SIZE=30,请教这个结构体用Delphi封装出来时怎样的?对象名称不变哈
typedef struct
{
void *content;
unsigned char flags;
unsigned char vsm_size;
unsigned char vsm_data [ZMQ_MAX_VSM_SIZE];
} zmq_msg_t;其中,ZMQ_MAX_VSM_SIZE=30,请教这个结构体用Delphi封装出来时怎样的?对象名称不变哈
Content: Pointer;
Vsm_Size: Char;
Vsm_Data: array[0..ZMQ_MAX_VSM_SIZE - 1] of Char;
end;
参考
const
ZMQ_MAX_VSM_SIZE = 30;
type
zmq_msg_t = record
content:Pointer;
flags:Byte;
vsm_size:Byte;
vsm_data:array[0..ZMQ_MAX_VSM_SIZE] of Byte;
end;
vsm_data:array[0..ZMQ_MAX_VSM_SIZE-1] of Byte;
比如这样:
type
zmq_msg_t = record
content:Pointer;
flags:Byte;
vsm_size:Byte;
vsm_data:pchar;
end;
我在Delphi中掉要VC生成的动态链接库,其中动态链接库有函数的参数就是这个结构体的指针。
我的封装是这样的:type
zmq_msg_t = record
content:Pointer;
flags:Byte;
vsm_size:Byte;
vsm_data:array[0..29] of Byte;
end;
zmq_msg_tp=^zmq_msg_t;动态链接库中的函数原型是:
int zmq_msg_init (zmq_msg_t *msg);
我在Delphi中是这样定义的:
function zmq_msg_init(msg:zmq_msg_tp):Integer;cdecl;
请教这样有问题没?
1 C中的unsigned char对应delphi里面的Byte
2 无类型指针
3 静态数组就是确定一个长度,C的结构体是默认对其的,转换成Delphi的记录,不用加packed
4 C的参数默认调用规则是cdecl,这跟Delphi默认的不一致,一定要写清楚。
因此,你这样写是没有问题的。