Punteros de referencia
Los punteros de referencia son los punteros más sencillos y requieren la menor cantidad de procesamiento por parte del código auxiliar del cliente. Cuando un programa cliente pasa un puntero de referencia a un procedimiento remoto, el puntero de referencia siempre contiene la dirección de un bloque de memoria válido. Seguirá apuntando al mismo bloque de memoria cuando se complete el procedimiento remoto. Estos punteros se usan principalmente para implementar la semántica de referencia y para permitir parámetros [out] en C.
En el ejemplo siguiente, el valor del puntero no cambia durante la llamada, aunque el contenido de los datos en la dirección indicada por el puntero puede cambiar.
Un puntero de referencia tiene las siguientes características:
- Siempre apunta al almacenamiento válido y nunca tiene el valor NULL.
- Nunca cambia durante una llamada y siempre apunta al mismo almacenamiento antes y después de la llamada.
- Los datos devueltos desde el procedimiento remoto se escriben en el almacenamiento existente.
- El almacenamiento al que apunta un puntero de referencia no puede tener acceso ningún otro puntero ni ningún otro nombre en la función.
Use el atributo [ref] para especificar punteros de referencia en las definiciones de interfaz, como se muestra en el ejemplo siguiente.
/* IDL file */
[
uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45),
version(1.0)
]
interface RefPtrInterface
{
void RemoteFn([in, out, ref] char *pChar);
}
En este ejemplo se define el parámetro pChar como puntero a un solo carácter, no como una matriz de caracteres. Es un parámetro [out] y un puntero de referencia que señala a la memoria que la rutina de servidor RemoteFn rellenará con datos.