本帖最后由 highflybird 于 2011-5-6 12:54 编辑
回复 dinosaurhxe 的帖子
来个API的
以下程序详细地列举了机器上所有的网卡的IP地址细节:
需要DynamicWrapperX插件的支持,不懂的话参看我的讲堂二
http://bbs.mjtd.com/thread-85724-1-5.html
 - (vl-load-com)
- ;;;功能: 获取本机IP地址(内网)及其详细信息
- (defun C:IP (/ wrap pTable pSize ret i size count IPAddress InterfaceIndex SubnetMask BroadCast ReassemblySize lst)
- (setq wrap (vlax-create-object "DynamicWrapperX"))
- (vlax-invoke wrap 'Register "MSVCRT" "calloc" "i=ll" "r=p")
- (vlax-invoke wrap 'Register "MSVCRT" "free" "i=p")
- (vlax-invoke wrap 'Register "iphlpapi" "GetIpAddrTable" "i=ppl" "r=l")
- (vlax-invoke wrap 'Register "ws2_32" "inet_ntoa" "i=p" "r=s")
- ;;分配内存和
- (setq pTable (vlax-invoke wrap 'calloc 1 28))
- (setq pSize (vlax-invoke wrap 'calloc 1 4))
- (vlax-invoke wrap 'numput 0 pSize)
- ;;第一次测试
- (setq ret (vlax-invoke wrap 'GetIpAddrTable pTable pSize 0))
- ;;得到缓冲区内存
- (setq size (vlax-invoke wrap 'NumGet pSize))
- (vlax-invoke wrap 'free pTable)
- (setq pTable (vlax-invoke wrap 'calloc 1 size))
- ;;第二次
- (setq ret (vlax-invoke wrap 'GetIpAddrTable pTable pSize 0))
- ;;获取信息
- (setq Count (vlax-invoke wrap 'NumGet pTable))
- (setq i 0)
- (setq lst nil)
- (repeat Count
- (setq IPAddress (vlax-invoke wrap 'Numget pTable (+ i 4)))
- (setq InterfaceIndex (vlax-invoke wrap 'NumGet pTable (+ i 8)))
- (setq SubnetMask (vlax-invoke wrap 'NumGet pTable (+ i 12)))
- (setq BroadCast (vlax-invoke wrap 'NumGet pTable (+ i 16)))
- (setq ReassemblySize (vlax-invoke wrap 'NumGet pTable (+ i 20)))
- (setq lst (cons (list InterfaceIndex
- (vlax-invoke wrap 'inet_ntoa IPAddress)
- (vlax-invoke wrap 'inet_ntoa SubnetMask)
- (vlax-invoke wrap 'inet_ntoa BroadCast)
- ReassemblySize
- )
- lst
- )
- )
- (setq i (+ i 24))
- )
- ;;释放内存和物体
- (vlax-invoke wrap 'free pSize)
- (vlax-invoke wrap 'free pTable)
- (vlax-release-object wrap)
- (reverse lst)
- )
|