首页 > 其他分享 >一个数据类型困扰了我一下午

一个数据类型困扰了我一下午

时间:2024-10-27 11:45:01浏览次数:10  
标签:困扰 struct ULONG ADAPTER 下午 数据类型 LH ADDRESS PIP

用VBA写一个网络状态查看程序,调用用GetAdaptersAddresses函数。其中返回值的类型如上!没有现在的代码代参考。只能从MSDN上找help自己改写。结果返回的值就是对不上!本人知道是数据类型有问题,核对了好多次,就是找不到出错点!

typedef struct _IP_ADAPTER_ADDRESSES_LH {
  union {
    ULONGLONG Alignment;
    struct {
      ULONG    Length;
      IF_INDEX IfIndex;
    };
  };
  struct _IP_ADAPTER_ADDRESSES_LH    *Next;
  PCHAR                              AdapterName;
  PIP_ADAPTER_UNICAST_ADDRESS_LH     FirstUnicastAddress;
  PIP_ADAPTER_ANYCAST_ADDRESS_XP     FirstAnycastAddress;
  PIP_ADAPTER_MULTICAST_ADDRESS_XP   FirstMulticastAddress;
  PIP_ADAPTER_DNS_SERVER_ADDRESS_XP  FirstDnsServerAddress;
  PWCHAR                             DnsSuffix;
  PWCHAR                             Description;
  PWCHAR                             FriendlyName;
  BYTE                               PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
  ULONG                              PhysicalAddressLength;
  union {
    ULONG Flags;
    struct {
      ULONG DdnsEnabled : 1;
      ULONG RegisterAdapterSuffix : 1;
      ULONG Dhcpv4Enabled : 1;
      ULONG ReceiveOnly : 1;
      ULONG NoMulticast : 1;
      ULONG Ipv6OtherStatefulConfig : 1;
      ULONG NetbiosOverTcpipEnabled : 1;
      ULONG Ipv4Enabled : 1;
      ULONG Ipv6Enabled : 1;
      ULONG Ipv6ManagedAddressConfigurationSupported : 1;
    };
  };
  ULONG                              Mtu;
  IFTYPE                             IfType;
  IF_OPER_STATUS                     OperStatus;
  IF_INDEX                           Ipv6IfIndex;
  ULONG                              ZoneIndices[16];
  PIP_ADAPTER_PREFIX_XP              FirstPrefix;
  ULONG64                            TransmitLinkSpeed;
  ULONG64                            ReceiveLinkSpeed;
  PIP_ADAPTER_WINS_SERVER_ADDRESS_LH FirstWinsServerAddress;
  PIP_ADAPTER_GATEWAY_ADDRESS_LH     FirstGatewayAddress;
  ULONG                              Ipv4Metric;
  ULONG                              Ipv6Metric;
  IF_LUID                            Luid;
  SOCKET_ADDRESS                     Dhcpv4Server;
  NET_IF_COMPARTMENT_ID              CompartmentId;
  NET_IF_NETWORK_GUID                NetworkGuid;
  NET_IF_CONNECTION_TYPE             ConnectionType;
  TUNNEL_TYPE                        TunnelType;
  SOCKET_ADDRESS                     Dhcpv6Server;
  BYTE                               Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH];
  ULONG                              Dhcpv6ClientDuidLength;
  ULONG                              Dhcpv6Iaid;
  PIP_ADAPTER_DNS_SUFFIX             FirstDnsSuffix;
} IP_ADAPTER_ADDRESSES_LH, *PIP_ADAPTER_ADDRESSES_LH;

要把以上代码转换成VBA的type格式,要核对许多数据类型,并找到与vba的对应关系!没有VC++的库文件,所以找起来很麻烦!【注:vc++开发环境太庞大,每次编译太麻烦。所以就一直用VB。连开发环境都不用安装,从office办公套件直接套用就OK了】

后来让人工智能邦我转换。结果是不能正常使用的,要更改许多地方,尤其是ULONG64、字符串指针、自定义类型struct……

但是给备注,一看就明白。改好后,就能取到正确的数据。粗看我手工编写的与人工智能编写的没有太大区别!看了几遍,也没能发现问题!

放入EXECl表格对比,发现问题了!

ZoneIndices[16] 数据类型是long,惯性思维,给改成byte了,差了太多。所以返回值不正确!

为什么许多API函数返回byte的数据缓冲区,而不是返回真实的数据。主要是考虑兼容性。一个API函数返回值,新、旧函数可能差别很大。但新函数返回数据必须包含旧函数的返回数据,格式完全一样!所以旧程序能完美运行在最新的操作系统中,而不用对老程序进行改写!

大家见笑了。

黄渤海新区能在pagefile.sys文件(for window)检出账号登录的上网记录!试问技术界的天花板也不过如此!

其它技术资料查看本人网站

标签:困扰,struct,ULONG,ADAPTER,下午,数据类型,LH,ADDRESS,PIP
From: https://blog.csdn.net/wjjhyf/article/details/143265878

相关文章

  • Rust中str又是什么数据类型?
    在Rust中,str是一种字符串切片类型,但它本身是一个动态大小类型,无法直接使用。通常情况下,我们会通过&str或Box<str>等方式来引用str,因为str类型的数据在内存中具有变长特性,编译器无法在编译时确定其具体大小。str的特点和用途动态大小类型(DST)str是一种动态大小类......
  • 【Java】数据类型与变量
    数据类型与变量1.字面常量2.数据类型3.变量3.1变量概念3.2语法格式3.3整型变量3.3.1整型变量3.3.2长整型变量3.3.3短整型变量3.3.4字节型变量3.4浮点型变量3.4.1双精度浮点型3.4.2单精度浮点型3.5字符型变量3.6布尔型变量3.7类型转换3.7.1自动类型转......
  • GESP一级真题分析-202303-选择题1-输入输出设备、存储单位、默认数据类型、标识符命名
    GESP一级真题分析-202303-选择题1-输入输出设备、存储单位、默认数据类型、标识符命名PDF文档公众号回复关键字:202410261相关知识点1)输入输出设备输入设备是外界向计算机传送信息的装置。在微型计算机系统中,最常用的输入设备是键盘和鼠标。此外还有电子光笔、数字化......
  • HarmonyOS:Node-API实现跨语言交互(2)Node-API支持的数据类型和接口
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/18502733➤如果链接不是为敢技术的博客园地址,则可能是......
  • 02-python 数据类型
    python容器类型数据str序列操作字符串属于序列类型,所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引、下标)访问它们。s="hellomoluo"Python还支持索引值是负数,此类索引是从右向左计数,换句话说,从最后一个元素开始计......
  • 数据库中数据类型的学习
    数据库中数据类型目录数据库中数据类型MySQL数据类型:Text类型:Number类型:Date类型:SQLServer数据类型String类型:Date类型其他数据类型MySQL数据类型:在MySQL中,有三种主要的类型:Text(文本)、Number(数字)和Date/Time(日期/时间)类型。Text类型:数据类型描述CHAR(size)保......
  • Redis学习:十大数据类型、RDB持久化
    Redis学习文章目录Redis学习1.Redis-10大数据类型2.Redis持久化1.Redis-10大数据类型数据类型是value的类型,key的类型都是String数据类型是value的类型,key的类型都是String数据类型是value的类型,key的类型都是String命令不区分大小写,但key是区分大小写的命......
  • 鸿蒙Next数据同步艺术:常见数据类型处理
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。引言在华为鸿蒙HarmonyOSNext中,标准化......
  • JavaScript:三、数据类型
    JavaScript:三、数据类型JavaScript将数据类型分为两大类,分别是基本数据类型(或称为值类型)和复杂数据类型(或称为引用类型)。值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol。引用数据类型(对象类型):对象(Object)、数组(Array)......
  • 信息学奥赛复赛复习20-CSP-S2019-01格雷码-数据类型范围、unsigned 关键字、无符号范
    PDF文档回复:202410231P5657[CSP-S2019]格雷码[题目描述]通常,人们习惯将所有n位二进制串按照字典序排列,例如所有2位二进制串按字典序从小到大排列为:00,01,10,11。格雷码(GrayCode)是一种特殊的nn位二进制串排列法,它要求相邻的两个二进制串间恰好有一位不同,特别地......