其实楼主前几年的那个帖子里面,xshrimp也给出过类似highflybird版主的代码的在我的WIN 7下可用
http://bbs.mjtd.com/forum.php?mo ... 3234&fromuid=250774
试了一下,确实可以,但对于固定IP地址似乎有些问题。 回复 highflybird 的帖子
好贴呀,非常好 本帖最后由 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)
)
回复 highflybird 的帖子
太高深了,LISP看来也是学无止境啊!
页:
1
[2]