Condividi tramite


Top-Level e puntatori incorporati

Per comprendere in che modo i puntatori e i relativi elementi dati associati vengono allocati in Microsoft RPC, è necessario distinguere tra puntatori di primo livello e puntatori incorporati. È anche utile fare riferimento al set di tutti i puntatori che non sono puntatori di primo livello.

I puntatori di primo livello sono quelli specificati come nomi di parametri nei prototipi di funzione. I puntatori di primo livello e i relativi riferimenti vengono sempre allocati nel server.

I puntatori incorporati sono puntatori incorporati in strutture di dati, ad esempio matrici, strutture e unioni. Quando i puntatori incorporati scrivono solo l'output in un buffer e sono Null in input, l'applicazione server può modificare i valori in non null. In questo caso, gli stub client allocano nuova memoria per questi dati.

Se il puntatore incorporato non è null nel client prima della chiamata, gli stub non allocano la memoria nel client al ritorno. Gli stub tentano invece di scrivere la memoria associata al puntatore incorporato nella memoria esistente nel client associato a tale puntatore, sovrascrivendo i dati già presenti.

Nota

Per i dati letti da o scritti in un buffer e che non specifica le dimensioni del buffer, la lunghezza dell'output deve essere minore o uguale alla lunghezza di input. Viene generata un'eccezione RPC quando viene rilevato il overflow. Per i dati stringa, la lunghezza dell'output viene determinata controllando la lunghezza della stringa di input. Pertanto, le stringhe di output non possono superare la lunghezza delle stringhe di input. Le linee guida consigliate consentono di evitare questa operazione includendo sempre un parametro specificato per indicare le dimensioni del buffer.

 

I puntatori di sola scrittura incorporati vengono illustrati in Combinazione di puntatori e attributi direzionali.

Il termine puntatori a livello non superiore fa riferimento a tutti i puntatori non specificati come nomi di parametri nel prototipo di funzione, inclusi puntatori incorporati e più livelli di puntatori nidificati.