如何在Delphi中定义“UCHAR * POINTER_32”和“VOID * POINTER_32”类型?

前端之家收集整理的这篇文章主要介绍了如何在Delphi中定义“UCHAR * POINTER_32”和“VOID * POINTER_32”类型?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
背景:

为64位编译器翻译IP_OPTION_INFORMATION32ICMP_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类型?据我所知,没有32位指针类型可用于64位平台目标,我只是不喜欢它被定义,例如作为Int32类型:-)

对于上述类型,最精确的翻译是什么?

解决方法

另一个Stack Overflow问题包含POINTER_32的问题: POINTER_32 – what is it,and why?

在使用在不同进程中定义的结构执行互操作时,可以使用它,该进程具有32位指针.

在Delphi中没有等效的__ptr32,所以除了将它声明为32位整数之外别无选择.我会使用无符号类型.

猜你在找的Delphi相关文章