HELP_ME_HELP_U 2017-05-04 04:02 采纳率: 100%
浏览 557

VB6.0使用iphlpapi.dll,很多的函数返回122,怎么解决?

(122 缓冲区不是足够大)
代码如下
第二节 获取MIB-II 接口表
1、函数:
Private Declare Function GetIfTable Lib "iphlpapi.dll" (ByRef pIfTable As MIB_IFTABLE, ByRef pdwSize As Long, ByVal bOrder As Long) As Long
参数说明:
pIfTable:[输入]成功的话指向一个MIB_IFTABLE类型的缓冲区。
PdwSize:[输入,输出]指定pIfTable参数所占缓冲区的大小,如果缓冲区不是足够大返回接口表,函数设置这个参数等于所必须的缓冲区大小。
bOrder:[输入]指定返回的接口表是否按接口序号按上升顺序排列。如果参数为TRUE那么按上升顺序排列。
返回值:成功,返回0;失败,返回错误代码。
2、使用到的类型:
①MIB_IFTABLE 包含接口表
Private Type MIB_IFTABLE
dwNumEntries As Long '当前网络接口的总数
MIB_Table(9) As MIB_IFROW '指向一个包含MIB_IFROW类型的指针
End Type
②MIB_IFROW 保存接口信息
Private Type MIB_IFROW
wszName(0 To 511) As Byte '接口名称的Unicode字符串,必须为512字节
dwIndex As Long '接口编号
dwType As Long '接口类型,参看IP_ADAPTER_INFO类型的Type成员
dwMtu As Long '最大传输单元
dwSpeed As Long '接口速度(字节)
dwPhysAddrLen As Long '由bPhysAddr获得的物理地址有效长度
bPhysAddr(0 To 7) As Byte '物理地址
dwAdminStatus As Long '接口管理状态
dwOperStatus As Long '操作状态,以下值之一:
常量名称 值 说明
MIB_IF_OPER_STATUS_NON_OPERATIONAL 0 网络适配器被禁止,例如:地址冲突
MIB_IF_OPER_STATUS_UNREACHABLE 1 没有连接
MIB_IF_OPER_STATUS_DISCONNECTED 2 局域网:电缆未连接;广域网:无载波信号
MIB_IF_OPER_STATUS_CONNECTING 3 广域网适配器连接中
MIB_IF_OPER_STATUS_CONNECTED 4 广域网适配器连接上远程对等点
MIB_IF_OPER_STATUS_OPERATIONAL 5 局域网适配器默认状态
dwLastChange As Long '操作状态最后改变的时间
dwInOctets As Long '总共收到(字节)
dwInUcastPkts As Long '总共收到(unicast包)
dwInNUcastPkts As Long '总共收到(non-unicast包),包括广播包和多点传送包
dwInDiscards As Long '收到后丢弃包总数(即使没有错误)
dwInErrors As Long '收到出错包总数
dwInUnknownProtos As Long '收到后因协议不明而丢弃的包总数
dwOutOctets As Long '总共发送(字节)
dwOutUcastPkts As Long '总共发送(unicast包)
dwOutNUcastPkts As Long '总共发送(non-unicast包),包括广播包和多点传送包
dwOutDiscards As Long '发送丢弃包总数(即使没有错误)
dwOutErrors As Long '发送出错包总数
dwOutQLen As Long '发送队列长度
dwDescrLen As Long ' bDescr部分有效长度
bDescr(0 To 255) As Byte '接口描述
End Type
3、使用到的常量:

4、主要代码分析:
①分配足够大的缓存空间,然后直接调用GetIfTable获得接口信息:
Dim ifT As MIB_IFTABLE
LenIfT = Len(ifT)
RValue = GetIfTable(ifT, LenIfT, True)
②由ifT.dwNumEntries获得接口数量,然后用for…next循环获取每个接口信息:
For i = 0 To ifT.dwNumEntries - 1
Print "接口编号:" & ifT.MIB_Table(i).dwIndex
Print "接口速度:" & ifT.MIB_Table(i).dwSpeed
Next
③物理地址的获得:
PhysAddr = Right("00" & Hex(ifT.MIB_Table(i).bPhysAddr(0)), 2)
For j = 1 To 5
PhysAddr = PhysAddr & "-" & Right("00" & Hex(ifT.MIB_Table(i).bPhysAddr(j)), 2)
Next
Print "物理地址:" & PhysAddr

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 关于#python#的问题:求帮写python代码
    • ¥20 MATLAB画图图形出现上下震荡的线条
    • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
    • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
    • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
    • ¥15 perl MISA分析p3_in脚本出错
    • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
    • ¥15 ubuntu虚拟机打包apk错误
    • ¥199 rust编程架构设计的方案 有偿
    • ¥15 回答4f系统的像差计算