Condividi tramite


Puntatori di riferimento

I puntatori di riferimento sono i puntatori più semplici e richiedono la quantità minima di elaborazione da parte dello stub del client. Quando un programma client passa un puntatore di riferimento a una routine remota, il puntatore di riferimento contiene sempre l'indirizzo di un blocco di memoria valido. Il blocco di memoria verrà comunque puntato allo stesso blocco di memoria al termine della procedura remota. Questi puntatori vengono usati principalmente per implementare la semantica di riferimento e per consentire i parametri [out] in C.

Nell'esempio seguente il valore del puntatore non cambia durante la chiamata, anche se il contenuto dei dati nell'indirizzo indicato dal puntatore può cambiare.

modifica dei dati in corrispondenza di un indirizzo del puntatore di riferimento statico

Un puntatore di riferimento presenta le caratteristiche seguenti:

  • Punta sempre alla risorsa di archiviazione valida e non ha mai il valore NULL.
  • Non cambia mai durante una chiamata e punta sempre alla stessa risorsa di archiviazione prima e dopo la chiamata.
  • I dati restituiti dalla procedura remota vengono scritti nella risorsa di archiviazione esistente.
  • L'archiviazione a cui punta un puntatore di riferimento non può essere accessibile da qualsiasi altro puntatore o da qualsiasi altro nome nella funzione.

Usare l'attributo [ref] per specificare i puntatori di riferimento nelle definizioni di interfaccia, come illustrato nell'esempio seguente.

/* IDL file */
[ 
  uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45),
  version(1.0)
]
interface RefPtrInterface
{
  void RemoteFn([in, out, ref] char *pChar);
}

Questo esempio definisce il parametro pChar come puntatore a un singolo carattere, non una matrice di caratteri. Si tratta di un parametro [out] e di un puntatore di riferimento che punta alla memoria che la routine del server RemoteFn riempirà con i dati.