Autor Thema: Namesauflösung mit Winsock.dll VBA nach LS  (Gelesen 2433 mal)

Offline RKuehle

  • Junior Mitglied
  • **
  • Beiträge: 80
  • Geschlecht: Männlich
Namesauflösung mit Winsock.dll VBA nach LS
« am: 03.05.10 - 17:45:01 »
Hallo Forum,

ich stehe wieder mal (seit Stunden) auf dem Schlauch und bitte daher um Hilfe!

Ich versuche eine IP-Adresse in den zugehörigen Hotnamen aufzulösen. Habe mir dazu entsprechenden VBA-Code im Inet gesucht. Dieser läuft im Excel auch ohne Probleme. Im LS gehen die Funktionen SocketsInitialize und SocketsCleanUp io.
In der Hauptfunktion GetHostnamefromIP geht mit der CopyMemory-Funktion was schief. ich weiß allerdings nicht was.
Kann jemand mal bitte den Code prüfen ? Vllt. hat ja auch jemand eine Aussage was fehlerhaft ist bzw. einen Korrekturhinweis. Hier mal der Code. Die Änderungen zum VBA sind als Kommentar eingefügt.

Bin im Moment völlig ahnungslos ;-(((

Danke für die Mühe!

Grüße R.Kühle

PS: LoNo läuft unter XP SP3 . Die Nutzer sind Standarduser

---
' Aufruf -> GetHostNameFromIP("111.222.111.222")

// Declare

Option Public
Option Explicit
Private Const WSADescription_Len  = 256 ' im VBA as Long
Private Const WSASYS_Status_Len  = 128 ' im VBA as Long
Private Const WS_VERSION_REQD  = &H101 ' im VBA as Long
Private Const IP_SUCCESS = 0 ' im VBA as Long
Private Const SOCKET_ERROR = -1 ' im VBA as Long
Private Const AF_INET = 2 ' im VBA as Long
Private Type WSADATA
   wVersion As Integer
   wHighVersion As Integer
   szDescription(0 To WSADescription_Len) As Integer ' Im VBA as Integer ' im VBA as Byte. Muß aber auch unterLoNo 5 laufen
   szSystemStatus(0 To WSASYS_Status_Len) As Integer ' Im VBA as Integer '' im VBA as Byte. Muß aber auch unterLoNo 5 laufen
   imaxsockets As Integer
   imaxudp As Integer
   lpszvenderinfo As Long
End Type
Declare Function WSAStartup Lib "wsock32" (Byval VersionReq As Long, WSADataReturn As WSADATA) As Long
Declare Function WSACleanup Lib "wsock32" () As Long
Declare Function inet_addr Lib "wsock32" (Byval s As String) As Long
Declare Function gethostbyaddr Lib "wsock32" (haddr As Long, Byval hnlen As Long, Byval addrtype As Long) As Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (xDest As Any, xSource As Any, Byval nbytes As Long)
Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (lpString As Any) As Long

// Func & Subs

Private Function SocketsInitialize() As Integer ' im VBA as Boolean
   Dim WSAD As WSADATA
   SocketsInitialize = WSAStartup(WS_VERSION_REQD, WSAD) = IP_SUCCESS
End Function

Private Sub SocketsCleanup()
   If WSACleanup() <> 0 Then
      Msgbox "Windows Sockets error occurred in Cleanup."
   End If
End Sub

Private Function GetHostNameFromIP(Byval sAddress As String) As String
   Dim ptrHosent As Long
   Dim hAddress As Long
   Dim nbytes As Long
   If SocketsInitialize() Then
'convert string address to long
      hAddress = inet_addr(sAddress)
      If hAddress <> SOCKET_ERROR Then
'obtain a pointer to the HOSTENT structure
'that contains the name and address
'corresponding to the given network address.
         ptrHosent = gethostbyaddr(hAddress, 4, AF_INET)
         If ptrHosent <> 0 Then
'convert address and
'get resolved hostname
'''''''''''''ab hier geht wohl was schief **********************************
            CopyMemory ptrHosent, Byval ptrHosent, 4
            nbytes = lstrlen(Byval ptrHosent)
            If nbytes > 0 Then
               sAddress = Space$(nbytes)
               CopyMemory Byval sAddress, Byval ptrHosent, nbytes
               GetHostNameFromIP = sAddress
            End If
         Else
            GetHostNameFromIP = "Call to gethostbyaddr failed."
         End If 'If ptrHosent
         SocketsCleanup
      Else
         GetHostNameFromIP = "String passed is an invalid IP."
      End If 'If hAddress
   Else
      GetHostNameFromIP = "Sockets failed to initialize."
   End If 'If SocketsInitialize
   End Function
« Letzte Änderung: 03.05.10 - 17:46:41 von RKuehle »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz