修改的代码,测试通过: Private Type WSAdata wVersion As Integer wHighVersion As Integer szDescription(0 To 255) As Byte szSystemStatus(0 To 128) As Byte iMaxSockets As Integer iMaxUdpDg As Integer lpVendorInfo As Long End Type Private Type Hostent h_name As Long h_aliases As Long h_addrtype As Integer h_length As Integer h_addr_list As Long End TypePrivate Declare Function GetHostByName Lib "wsock32.dll" Alias "gethostbyname" (ByVal HostName As String) As Long Private Declare Function WSAStartup Lib "wsock32.dll" (ByVal wVersionRequired&, lpWSAdata As WSAdata) As Long Private Declare Function WSACleanup Lib "wsock32.dll" () As Long Private Declare Sub CopyMemoryIP Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)Public Function GetIpadd(objhost As String) As String Dim HostName As String Dim lpWSAdata As WSAdata Dim lpHost As Long Dim HOST As Hostent Dim dwIPAddr As Long Dim tmpIPAddr() As Byte Dim sIPAddr As String HostName = objhost
Call WSAStartup(&H101, lpWSAdata) lpHost = GetHostByName(HostName + String(64 - Len(HostName), 0)) If lpHost <> 0 Then CopyMemoryIP HOST, lpHost, Len(HOST) CopyMemoryIP dwIPAddr, HOST.h_addr_list, 4 ReDim tmpIPAddr(1 To HOST.h_length) CopyMemoryIP tmpIPAddr(1), dwIPAddr, HOST.h_length For I = 1 To HOST.h_length sIPAddr = sIPAddr & tmpIPAddr(I) & "." Next GetIpadd = Mid$(sIPAddr, 1, Len(sIPAddr) - 1) Else GetIpadd = "" End If Call WSACleanup End Function
Private Type WSAdata
wVersion As Integer
wHighVersion As Integer
szDescription(0 To 255) As Byte
szSystemStatus(0 To 128) As Byte
iMaxSockets As Integer
iMaxUdpDg As Integer
lpVendorInfo As Long
End Type
Private Type Hostent
h_name As Long
h_aliases As Long
h_addrtype As Integer
h_length As Integer
h_addr_list As Long
End TypePrivate Declare Function GetHostByName Lib "wsock32.dll" Alias "gethostbyname" (ByVal HostName As String) As Long
Private Declare Function WSAStartup Lib "wsock32.dll" (ByVal wVersionRequired&, lpWSAdata As WSAdata) As Long
Private Declare Function WSACleanup Lib "wsock32.dll" () As Long
Private Declare Sub CopyMemoryIP Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)Public Function GetIpadd(objhost As String) As String
Dim HostName As String
Dim lpWSAdata As WSAdata Dim lpHost As Long
Dim HOST As Hostent
Dim dwIPAddr As Long
Dim tmpIPAddr() As Byte
Dim sIPAddr As String HostName = objhost
Call WSAStartup(&H101, lpWSAdata)
lpHost = GetHostByName(HostName + String(64 - Len(HostName), 0)) If lpHost <> 0 Then
CopyMemoryIP HOST, lpHost, Len(HOST)
CopyMemoryIP dwIPAddr, HOST.h_addr_list, 4
ReDim tmpIPAddr(1 To HOST.h_length)
CopyMemoryIP tmpIPAddr(1), dwIPAddr, HOST.h_length
For I = 1 To HOST.h_length
sIPAddr = sIPAddr & tmpIPAddr(I) & "."
Next GetIpadd = Mid$(sIPAddr, 1, Len(sIPAddr) - 1)
Else
GetIpadd = ""
End If
Call WSACleanup
End Function