ref (attributo)

L'attributo [ref] identifica un puntatore di riferimento. Viene usato semplicemente per rappresentare un livello di riferimento indiretto.

pointer_default(ref)

typedef [ ref [[ , type-attribute-list ]] ] type-specifier declarator-list; 

typedef [ struct | union ] 
{
    [ ref [[ , field-attribute-list ]] ] type-specifier declarator-list;
    ...}

[[ [ function-attribute-list ] ]] type-specifier [[ptr-decl]] function-name(
    [ ref [[ , parameter-attribute-list ]] ] type-specifier [[standard-declarator]]
    , ...);

Parametri

type-attribute-list

Specifica uno o più attributi che si applicano al tipo. Gli attributi di tipo validi includono [handle], [switch_type], [transmit_as]; gli attributi del puntatore [ref], [unique]o [ptr]; e gli attributi di utilizzo [context_handle], [string]e [ignore]. Separare più attributi con virgole.

type-specifier

Specifica un tipo di base, uno struct, un'unione o un tipo di enumerazione o un identificatore di tipo. Una specifica di archiviazione facoltativa può precedere l'identificatore di tipo.

dichiaratore standard

Specifica un dichiaratore C standard, ad esempio un identificatore, un dichiaratore di puntatore o un dichiaratore di matrice. Per altre informazioni, vedere Array e Sized-Pointer Attributi, matrici e matricie puntatori.

declarator-list

Specifica i dichiaratori C standard, ad esempio identificatori, dichiaratori di puntatore e dichiaratori di matrice. Per altre informazioni, vedere Array e Sized-Pointer Attributi, matrici e matricie puntatori. L'elenco dichiaratore è costituito da uno o più dichiaratori separati da virgole. L'identificatore del nome parametro nel dichiaratore di funzione è facoltativo.

field-attribute-list

Specifica zero o più attributi di campo che si applicano alla struttura, al membro dell'unione o al parametro della funzione. Gli attributi di campo validi includono [first_is], [last_is], [length_is], [max_is], [size_is]; gli attributi di utilizzo [string], [ignore], e [context_handle]; l'attributo puntatore [ref], [unique]o [ptr]; e l'attributo union [switch_type]. Separare più attributi di campo con virgole.

function-attribute-list

Specifica zero o più attributi che si applicano alla funzione. Gli attributi di funzione validi sono [callback], [local]; l'attributo puntatore [ref], [unique]o [ptr]; e gli attributi di utilizzo [string], [ignore], e [context_handle].

ptr-decl

Specifica almeno un dichiaratore di puntatore a cui si applica l'attributo [ref]. Un dichiaratore di puntatore è lo stesso del dichiaratore del puntatore usato in C; viene costruito da * designator, modificatori come per lontano e qualificatore const.

function-name

Specifica il nome della routine remota.

parameter-attribute-list

È costituito da zero o più attributi appropriati per il tipo di parametro specificato. Gli attributi dei parametri possono accettare gli attributi direzionali [in] e [out]; gli attributi del campo [first_is], [last_is], [length_is], [max_is], [size_is], e [switch_type]; l'attributo puntatore [ref], [unique]o [ptr]; e gli attributi di utilizzo [context_handle] e [string]. L'attributo di utilizzo [ignore] non può essere usato come attributo di parametro. Separare più attributi con virgole.

Commenti

Un attributo puntatore può essere applicato come attributo di tipo, come attributo di campo che si applica a un membro della struttura, a un membro dell'unione o a un parametro; o come attributo di funzione che si applica al tipo restituito della funzione. L'attributo puntatore può essere visualizzato anche con la parola chiave [pointer_default].

Un puntatore di riferimento presenta le caratteristiche seguenti:

  • Punta sempre allo spazio di archiviazione valido; non ha mai il valore NULL. Un puntatore di riferimento può sempre essere dereferenziato.
  • Non cambia mai durante una chiamata. Un puntatore di riferimento punta sempre alla stessa risorsa di archiviazione nel client prima e dopo la chiamata.
  • Non alloca nuova memoria nel client. I dati restituiti dal server vengono scritti nella risorsa di archiviazione esistente specificata dal valore del puntatore di riferimento prima della chiamata.
  • Non causa l'aliasing. Non è possibile raggiungere l'archiviazione a cui punta un puntatore di riferimento da qualsiasi altro nome nella funzione.

Un puntatore di riferimento non può essere usato come tipo di puntatore restituito da una funzione.

Se non viene specificato alcun attributo per un parametro puntatore di primo livello, viene considerato come puntatore di riferimento.

Esempi

[unique] char * GetFirstName( 
    [in, ref] char * pszFullName);

Vedere anche

Matrici

Matrici e puntatori

Attributi di matrice e Sized-Pointer

Tipi di base MIDL

callback

const

context_handle

Enum

first_is

Gestire

Ignorare

last_is

length_is

Locale

max_is

Cambio

Ptr

size_is

string

Struct

switch_type

transmit_as

Unione

Unico