【发布时间】:2013-06-13 09:49:34
【问题描述】:
背景:
为 64 位编译器翻译 IP_OPTION_INFORMATION32 和 ICMP_ECHO_REPLY32 结构时,我遇到了要在那里使用的数据类型。参考资料中的结构定义:
IP_OPTION_INFORMATION32 结构:
typedef struct _IP_OPTION_INFORMATION32 {
UCHAR Ttl;
UCHAR Tos;
UCHAR Flags;
UCHAR OptionsSize;
UCHAR * POINTER_32 OptionsData;
} IP_OPTION_INFORMATION32, *PIP_OPTION_INFORMATION32;
我会这样翻译(对于 Delphi XE2,64 位目标平台)。如您所见,我不知道该结构的OptionsData字段使用什么类型:
IP_OPTION_INFORMATION32 = record
Ttl: UCHAR;
Tos: UCHAR;
Flags: UCHAR;
OptionsSize: UCHAR;
OptionsData: // what should I use here for UCHAR * POINTER_32 ?
end;
ICMP_ECHO_REPLY32 结构:
typedef struct icmp_echo_reply32 {
IPAddr Address;
ULONG Status;
ULONG RoundTripTime;
USHORT DataSize;
USHORT Reserved;
VOID * POINTER_32 Data;
struct ip_option_information32 Options;
} ICMP_ECHO_REPLY32, *PICMP_ECHO_REPLY32;
对于 Delphi XE2 64 位目标平台,我会写:
ICMP_ECHO_REPLY32 = record
Address: TIPAddr; // defined before
Status: ULONG;
RoundTripTime: ULONG;
DataSize: USHORT;
Reserved: USHORT;
Data: // what should I use here for VOID * POINTER_32 ?
Options: IP_OPTION_INFORMATION32;
end;
问题:
您将如何在 Delphi 中为 64 位平台目标定义 UCHAR * POINTER_32 和 VOID * POINTER_32 类型?据我所知,没有可用于 64 位平台目标的 32 位指针类型,我只是不喜欢定义它,例如作为Int32 类型:-)
上述类型的最精确翻译是什么?
【问题讨论】:
标签: delphi winapi 64-bit delphi-xe2