Foros del Web » Programación para mayores de 30 ;) » Programación General »

Alguien me explica este codigo? CopyMemory

Estas en el tema de Alguien me explica este codigo? CopyMemory en el foro de Programación General en Foros del Web. Hola, tengo este codigo: Dim ip(0 To 3) As Byte Dim var As String Call CopyMemory(ip(0), dwlocaladdr, Len(dwlocaladdr)) var = ip(0) & "." & ip(1) ...
  #1 (permalink)  
Antiguo 08/10/2008, 19:39
 
Fecha de Ingreso: agosto-2008
Mensajes: 30
Antigüedad: 15 años, 8 meses
Puntos: 0
Pregunta Alguien me explica este codigo? CopyMemory

Hola, tengo este codigo:

Dim ip(0 To 3) As Byte
Dim var As String

Call CopyMemory(ip(0), dwlocaladdr, Len(dwlocaladdr))

var = ip(0) & "." & ip(1) & "." & ip(2) & "." & ip(3)

dwlocaladdr es una variable Long miembro de una estructura MIB_TCPROW que contiene una direccion IP, y ese codigo convierte el contenido de esa variable a un formato legible (xxx.xxx.xxx.xxx).

1.- Por qué ip se declara como un array Byte de 4 bytes si se podria declarar como Long que tambien es de 4 bytes, pero si la declaro como Long, no funciona y no se por qué.

2.- Cuando ejecuto CopyMemory y copio dwlocaladdr a ip(0), los otros indices de ip (ip(1), ip(2), ip(3)) tambien pasan a contener valores, cosa que tampoco entiendo, ya que la funcion copia sólo a ip(0).

3.- Por qué despues de ejecutar CopyMemory, cada indice de ip pasa a tener una parte de la direccion IP, si el valor de dwlocaladdr es un numero totalmente diferente?

Alguna ayuda?

Saludos.
  #2 (permalink)  
Antiguo 09/10/2008, 01:31
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Alguien me explica este codigo? CopyMemory

1. Para acceder a cada uno de los numeros de la IP por separado y transformarlos a cadena.

2. Un array es memoria contigua, en este caso se escriben 4 bytes - Len(dwlocaladdr) - desde la primera direccion del array en adelante. Los parametros de CopyMemory son: buffer de destino (donde copiar), buffer de fuente (desde donde copiar) y total de bytes a copiar.

3. Es simplemente una manera diferente de acceder al numero en memoria, en lugar de hacerlo a los 4 bytes se hace a un solo byte por vez, y cada byte en un DWORD tiene diferente valor dependiendo de su posicion.

6016 por ejemplo es:
b(0)=128
b(1)=23
b(2)=0
b(3)=0

0 * 256 ^ 3 + 0 * 256 ^ 2 + 23 * 256 ^ 1 + 128 * 256 ^ 0 = 6016

65537:
b(0)=1
b(1)=0
b(2)=1
b(3)=0

0 * 256 ^ 3 + 1 * 256 ^ 2 + 0 * 256 ^ 1 + 1 * 256 ^ 0 = 65537

Por cierto, hay un subforo de VB.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
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 16:36.