Solved

Winsock2 call : gethostbyname() in Visual Basic

Posted on 1998-06-11
6
724 Views
Last Modified: 2013-11-25
the socket call gethostbyname() have the following
structure:

/********************************/
struct hostent FAR *
gethostbyname(
    const char FAR * name
    );
/*******************************/
so it involves returning a pointer to a UDT, how do I do this in Visual Basic?
I can return the value as BYTE, that doesn't seem to get
me anymore.
any code will be appreciated.
0
Comment
Question by:platiumstar
6 Comments
 
LVL 6

Expert Comment

by:clifABB
ID: 1463110
Check out MSKB #Q160215 located at:
http://support.microsoft.com/support/kb/articles/q160/2/15.asp

Basically here's the declares and calls:
Private Declare Function gethostname Lib "WSOCK32.DLL" (ByVal hostname$, HostLen&) As Long
Private Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal hostname$) As Long

   Dim hostname As String * 256
   Dim hostent_addr As Long
  If gethostname(hostname, 256) = SOCKET_ERROR Then
    MsgBox "Windows Sockets error " & Str(WSAGetLastError())
    Exit Sub
  Else
    hostname = Trim$(hostname)
  End If
  hostent_addr = gethostbyname(hostname)

0
 

Author Comment

by:platiumstar
ID: 1463111
You're returning a long, where does that get me? I want the HOSTENT structure it returned. Maybe You misunderstood the question.

0
 
LVL 6

Expert Comment

by:alamo
ID: 1463112
He had it right, but the pasted text from that article got cut. Rather than me just repaste it here, you should go to the URL clifABB gave, it has an entire example program that does precisely what you want. hostent_addr is a long which holds a pointer to the HOSTENT structure which is then passed to  RtlMoveMemory to copy the structure returned from gethostbyname() into a UDT.

0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 4

Accepted Solution

by:
yowkee earned 50 total points
ID: 1463113
You need to use API RtlMoveMemory to copy the pointer
to structure into UDT in VB:

--
Public Type HOSTENT
    hName As Long
    hAliases As Long
    hAddrType As Integer
    hLength As Integer
    hAddrList As Long
End Type
 
Public Declare Function gethostbyname Lib _
    "WSOCK32.DLL" (ByVal hostname$) As Long
Public Declare Sub RtlMoveMemory Lib _
    "KERNEL32" (hpvDest As Any, ByVal hpvSource&, ByVal cbCopy&)


    Dim hostname As String * 256
    Dim hostent_addr As Long
    Dim host As HOSTENT
    Dim hostip_addr As Long
    Dim temp_ip_address() As Byte
    Dim i As Integer
    Dim ip_address As String

    :   ' Getting host name
    :
    :

    hostent_addr = gethostbyname(hostname)
    If hostent_addr = 0 Then
        MsgBox "Winsock.dll is not responding."
        Exit Sub
    End If

    ' Copy to HOSTENT structure
    RtlMoveMemory host, hostent_addr, LenB(host)
    RtlMoveMemory hostip_addr, host.hAddrList, 4
    ReDim temp_ip_address(1 To host.hLength)
    RtlMoveMemory temp_ip_address(1), hostip_addr, host.hLength
    For i = 1 To host.hLength
        ip_address = ip_address & temp_ip_address(i) & "."
    Next
    ip_address = Left$(ip_address, Len(ip_address) - 1)
    MsgBox ip_address
    :
    :

----

Regards.
0
 

Author Comment

by:platiumstar
ID: 1463114
ohhh, ok, stupid me. I guess ClifABB deserve some points. But I like alamo's comment better, explain things. oh well. more points next time.
0
 

Author Comment

by:platiumstar
ID: 1463115
ohhh, ok, stupid me. I guess ClifABB deserve some points. But I like alamo's comment better, explain things. oh well. more points next time. Thanks to all.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

932 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now