明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: dinosaurhxe

[讨论] 获取本机IP地址

  [复制链接]
发表于 2011-5-5 20:00:28 | 显示全部楼层
本帖最后由 qjchen 于 2011-5-5 20:01 编辑

其实楼主前几年的那个帖子里面,xshrimp也给出过类似highflybird版主的代码的在我的WIN 7下可用

http://bbs.mjtd.com/forum.php?mo ... 3234&fromuid=250774
 楼主| 发表于 2011-5-6 09:19:54 | 显示全部楼层
试了一下,确实可以,但对于固定IP地址似乎有些问题。
发表于 2011-5-6 09:39:05 | 显示全部楼层
回复 highflybird 的帖子

好贴呀,非常好
发表于 2011-5-6 12:50:46 | 显示全部楼层
本帖最后由 highflybird 于 2011-5-6 12:54 编辑

回复 dinosaurhxe 的帖子
来个API的
以下程序详细地列举了机器上所有的网卡的IP地址细节:
需要DynamicWrapperX插件的支持,不懂的话参看我的讲堂二
http://bbs.mjtd.com/thread-85724-1-5.html
  1. (vl-load-com)
  2. ;;;功能: 获取本机IP地址(内网)及其详细信息
  3. (defun C:IP (/ wrap pTable pSize ret i size count IPAddress InterfaceIndex SubnetMask BroadCast ReassemblySize lst)
  4.   (setq wrap (vlax-create-object "DynamicWrapperX"))
  5.   (vlax-invoke wrap 'Register "MSVCRT" "calloc" "i=ll" "r=p")
  6.   (vlax-invoke wrap 'Register "MSVCRT" "free" "i=p")
  7.   (vlax-invoke wrap 'Register "iphlpapi" "GetIpAddrTable" "i=ppl" "r=l")
  8.   (vlax-invoke wrap 'Register "ws2_32" "inet_ntoa" "i=p" "r=s")
  9.   ;;分配内存和
  10.   (setq pTable (vlax-invoke wrap 'calloc 1 28))
  11.   (setq pSize (vlax-invoke wrap 'calloc 1 4))
  12.   (vlax-invoke wrap 'numput 0 pSize)
  13.   ;;第一次测试
  14.   (setq ret (vlax-invoke wrap 'GetIpAddrTable pTable pSize 0))
  15.   ;;得到缓冲区内存
  16.   (setq size (vlax-invoke wrap 'NumGet pSize))
  17.   (vlax-invoke wrap 'free pTable)
  18.   (setq pTable (vlax-invoke wrap 'calloc 1 size))
  19.   ;;第二次
  20.   (setq ret (vlax-invoke wrap 'GetIpAddrTable pTable pSize 0))
  21.   ;;获取信息
  22.   (setq Count (vlax-invoke wrap 'NumGet pTable))
  23.   (setq i 0)
  24.   (setq lst nil)
  25.   (repeat Count
  26.     (setq IPAddress  (vlax-invoke wrap 'Numget pTable (+ i 4)))
  27.     (setq InterfaceIndex (vlax-invoke wrap 'NumGet pTable (+ i 8)))
  28.     (setq SubnetMask (vlax-invoke wrap 'NumGet pTable (+ i 12)))
  29.     (setq BroadCast (vlax-invoke wrap 'NumGet pTable (+ i 16)))
  30.     (setq ReassemblySize (vlax-invoke wrap 'NumGet pTable (+ i 20)))
  31.     (setq lst (cons (list InterfaceIndex
  32.      (vlax-invoke wrap 'inet_ntoa IPAddress)
  33.      (vlax-invoke wrap 'inet_ntoa SubnetMask)
  34.      (vlax-invoke wrap 'inet_ntoa BroadCast)
  35.      ReassemblySize
  36.       )
  37.       lst
  38.        )
  39.     )
  40.     (setq i (+ i 24))
  41.   )
  42.   ;;释放内存和物体
  43.   (vlax-invoke wrap 'free pSize)
  44.   (vlax-invoke wrap 'free pTable)
  45.   (vlax-release-object wrap)
  46.   (reverse lst)
  47. )



 楼主| 发表于 2011-5-6 13:22:35 | 显示全部楼层
回复 highflybird 的帖子

太高深了,LISP看来也是学无止境啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-6-10 09:53 , Processed in 0.146330 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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