"Hugo Gsell" <hags
...@hotmail.com> wrote in message
news:ug%23yBQJYKHA.220@TK2MSFTNGP02.phx.gbl...
> ... cuando vuelve de la llamada k.id TIENE EL VALOR QUE MODIFIQUE en
> GrabaDatos!!!!!!!!!!!1
> Como si fuera que esta como byref.....
Lo que acabas de llamar "estructura defdatDatos", en realidad lo tienes
definido como una Clase, y no como una estructura, ¿verdad?
En ese caso, se compila como un objeto tipo-referencia, no como un
objeto tipo-valor. Eso significa que tu "variable" no tiene los datos, sino
una referencia al lugar donde realmente se encuentran los datos (el "heap").
Cuando una variable tipo-referencia la pasas con ByVal, lo que pasas es
el "valor de la referencia" (y si pones ByRef se pasa una "referencia a la
referencia"). En otras palabras, el ByVal pasa una copia del valor de la
variable, que es una copia del puntero que apunta al area de datos. Si
cambias los datos a través de la copia del puntero, queda cambiada la única
copia de esos datos que existía en memoria (en el heap), y por tanto se ven
cambiados esos datos a través del puntero original (cuya copia pasaste con
ByVal).
Lo único que hace el ByVal es que si cambias el propio puntero dentro de
la subrutina (haciendolo apuntar a otro sitio), entonces no se ve afectado
el puntero original que pasaste, que seguiría apuntando al mismo sitio.