如何在Delphi中定义“UCHAR * POINTER_32”和“VOID * POINTER_3
发布时间:2020-12-15 03:50:22 所属栏目:大数据 来源:网络整理
导读:背景: 为64位编译器翻译 IP_OPTION_INFORMATION32 和 ICMP_ECHO_REPLY32 结构我在那里使用了数据类型.参考文献的结构定义: IP_OPTION_INFORMATION32结构: typedef struct _IP_OPTION_INFORMATION32 { UCHAR Ttl; UCHAR Tos; UCHAR Flags; UCHAR OptionsSi
背景:
为64位编译器翻译 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类型?据我所知,没有32位指针类型可用于64位平台目标,我只是不喜欢它被定义,例如作为Int32类型:-) 对于上述类型,最精确的翻译是什么? 解决方法
另一个Stack Overflow问题包含POINTER_32的问题:
POINTER_32 – what is it,and why?
在使用在不同进程中定义的结构执行互操作时,可以使用它,该进程具有32位指针. 在Delphi中没有等效的__ptr32,所以除了将它声明为32位整数之外别无选择.我会使用无符号类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |