Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

gethostname(hostname, 256) = SOCKET_ERROR, me retorna Error

Estas en el tema de gethostname(hostname, 256) = SOCKET_ERROR, me retorna Error en el foro de Visual Basic clásico en Foros del Web. Hola a todos, tengo el siguiente problema, utilizo una api para saber el nombre de mi host, pero no sé porque me retorna-1 Error, ¿porqué ...
  #1 (permalink)  
Antiguo 12/05/2005, 14:29
 
Fecha de Ingreso: mayo-2004
Ubicación: Managua, Nicaragua
Mensajes: 281
Antigüedad: 20 años
Puntos: 0
gethostname(hostname, 256) = SOCKET_ERROR, me retorna Error

Hola a todos, tengo el siguiente problema, utilizo una api para saber el nombre de mi host, pero no sé porque me retorna-1 Error, ¿porqué la variable cadena hostname no me toma el nombre de la máquina?, espero me ayuden, lo tengo de la siguiente manera.

En un modulo tengo las declaraciones de la API

Public Declare Function gethostname Lib _
"WSOCK32.DLL" (ByVal hostname$, HostLen&) As Long

Por ejemplo, en el Form_Load() tengo esto:

Dim hostname As String * 256
If gethostname(hostname, 256) = SOCKET_ERROR Then
MsgBox "Windows Sockets error " & Str(WSAGetLastError())
Exit Sub
Else
hostname = Trim$(hostname)
End If ,
Y me tira el Mensaje de Error, sin asignarle nada a la variable cadena hostname.
__________________
Julio Hernández
  #2 (permalink)  
Antiguo 12/05/2005, 15:15
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Enhorabuena por atreverte con los sockets de verdad y no con WinSock.

La respuesta es sencilla. En C se suele usar una cosa que se llaman "punteros". Se usan para almacenar direcciones de memoria.

Una función normal pide datos y devuelve otro u otros. En el caso de gethostname, pide dos datos y devuelve un estado.

Pero uno de los datos no es una variable String en sí misma, sino una _dirección_ para guardar el resultado allí.

La definición es:

http://msdn.microsoft.com/library/de...hostname_2.asp
Código:
int gethostname(
  char* name,
  int namelen
);
Parameters

name
[out] Pointer to a buffer that receives the local host name.
namelen
[in] Length of the buffer, in bytes.

Return Values
If no error occurs, gethostname returns zero. Otherwise, it returns SOCKET_ERROR and a specific error code can be retrieved by calling WSAGetLastError.


Atento a "Pointer to a buffer that receives the local host name." -> Puntero que recibirá el nombre de la máquina local.

En la API de Windows es común esto. En C y otros lenguajes es muy común, pero en VB no está "documentado". Para obtener la dirección de una variable, necesitas usar la función VarPtr. El resultado es el que debes pasar a la función de la API.
  #3 (permalink)  
Antiguo 13/05/2005, 09:45
 
Fecha de Ingreso: mayo-2004
Ubicación: Managua, Nicaragua
Mensajes: 281
Antigüedad: 20 años
Puntos: 0
Gracias MaxExtreme por tu respuesta, como creí que únicamente se declaraba esa función api en un módulo Function gethostname Lib _ es precisamente por eso que no me servía, tenía que declarar varias apis. Le dejo una dirección que encontré que hace precisamente eso

http://vbnet.mvps.org/index.html?cod...ethostname.htm

Después de esto, como probé que funciona y estoy comenzando con esto, voy a estudiarla e Investigar. Saludos xD
__________________
Julio Hernández
  #4 (permalink)  
Antiguo 13/05/2005, 12:48
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
De nada

En cualquier caso ya sabes, para llamar a las APIs vigila lo que se refiera a "punteros".
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:06.