搜索
aardio官方社区 门户 查看主题

API结构体里包含位域结构的写法。。。

发布者: 土冒 | 发布时间: 2017-10-25 22:46| 查看数: 577| 评论数: 2|帖子模式

比如下面的结构体,有2个成员是位域结构。。。搜了下没找到相关介绍,只能粗糙处理了一下,InterfaceAndOperStatusFlags占了一个字节就用byte代替,NET_LUID占了8个字节可以用long或者byte[ 8 ],不知道有没有正规一点的写法?
  1. typedef union _NET_LUID {
  2.         ULONG64 Value;
  3.         struct {
  4.                 ULONG64 Reserved :24;
  5.                 ULONG64 NetLuidIndex :24;
  6.                 ULONG64 IfType :16;
  7.         } Info;
  8. } NET_LUID, *PNET_LUID;

  9. typedef struct _MIB_IF_ROW2 {
  10.         NET_LUID InterfaceLuid;
  11.         NET_IFINDEX InterfaceIndex;
  12.         GUID InterfaceGuid;
  13.         WCHAR Alias[IF_MAX_STRING_SIZE + 1];
  14.         WCHAR Description[IF_MAX_STRING_SIZE + 1];
  15.         ULONG PhysicalAddressLength;
  16.         UCHAR PhysicalAddress[IF_MAX_PHYS_ADDRESS_LENGTH];
  17.         UCHAR PermanentPhysicalAddress[IF_MAX_PHYS_ADDRESS_LENGTH];
  18.         ULONG Mtu;
  19.         IFTYPE Type;
  20.         TUNNEL_TYPE TunnelType;
  21.         NDIS_MEDIUM MediaType;
  22.         NDIS_PHYSICAL_MEDIUM PhysicalMediumType;
  23.         NET_IF_ACCESS_TYPE AccessType;
  24.         NET_IF_DIRECTION_TYPE DirectionType;
  25.         struct {
  26.                 BOOLEAN HardwareInterface :1;
  27.                 BOOLEAN FilterInterface :1;
  28.                 BOOLEAN ConnectorPresent :1;
  29.                 BOOLEAN NotAuthenticated :1;
  30.                 BOOLEAN NotMediaConnected :1;
  31.                 BOOLEAN Paused :1;
  32.                 BOOLEAN LowPower :1;
  33.                 BOOLEAN EndPointInterface :1;
  34.         } InterfaceAndOperStatusFlags;
  35.         IF_OPER_STATUS OperStatus;
  36.         NET_IF_ADMIN_STATUS AdminStatus;
  37.         NET_IF_MEDIA_CONNECT_STATE MediaConnectState;
  38.         NET_IF_NETWORK_GUID NetworkGuid;
  39.         NET_IF_CONNECTION_TYPE ConnectionType;
  40.         ULONG64 TransmitLinkSpeed;
  41.         ULONG64 ReceiveLinkSpeed;
  42.         ULONG64 InOctets;
  43.         ULONG64 InUcastPkts;
  44.         ULONG64 InNUcastPkts;
  45.         ULONG64 InDiscards;
  46.         ULONG64 InErrors;
  47.         ULONG64 InUnknownProtos;
  48.         ULONG64 InUcastOctets;
  49.         ULONG64 InMulticastOctets;
  50.         ULONG64 InBroadcastOctets;
  51.         ULONG64 OutOctets;
  52.         ULONG64 OutUcastPkts;
  53.         ULONG64 OutNUcastPkts;
  54.         ULONG64 OutDiscards;
  55.         ULONG64 OutErrors;
  56.         ULONG64 OutUcastOctets;
  57.         ULONG64 OutMulticastOctets;
  58.         ULONG64 OutBroadcastOctets;
  59.         ULONG64 OutQLen;
  60. } MIB_IF_ROW2, *PMIB_IF_ROW2;
复制代码

最新评论

Jacen.He 发表于 2017-10-25 23:17:32
有什么语法特性这些语法文档里会有的,
位域aardio是不支持的,我们也不可能支持C语言里的所有的语法,尤其是这种本来就很不常用的。

aardio提供了很多按位运算符,可以自己运算一下,不算太麻烦。
土冒 发表于 2017-10-26 11:04:32
Jacen.He 发表于 2017-10-25 23:17
有什么语法特性这些语法文档里会有的,
位域aardio是不支持的,我们也不可能支持C语言里的所有的语法,尤 ...

嗯,多谢版主解答。。。其实只要保证结构体内部结构不错位,用起来也没差,能获取到正确的内容,怎么方便怎么写了。。。

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-4-24 03:30 , Processed in 0.062503 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表