Tre tipi di puntatore
MIDL supporta tre tipi di puntatori per supportare un'ampia gamma di applicazioni. I tre diversi livelli sono denominati riferimenti, univoci e completi e sono indicati rispettivamente dagli attributi [ref], [unique]e [ptr]. Le classi puntatore descritte da questi attributi si escludono a vicenda. Gli attributi puntatori possono essere applicati ai puntatori nelle definizioni dei tipi, ai tipi restituiti dalla funzione, ai parametri di funzione, ai membri di strutture o unioni o agli elementi della matrice.
I puntatori incorporati sono puntatori che sono membri di strutture o unioni. Possono anche essere elementi di matrici. Nella direzione [in] i puntatori incorporati [ref] devono puntare all'archiviazione valida e non devono essere null. Questa situazione è ricorsivamente applicabile a qualsiasi puntatore [ref] a cui puntano. Nella direzione [ in] incorporato [univoco] e i puntatori completi (puntatori con l'attributo [ptr] possono essere null.
Qualsiasi attributo puntatore inserito in un parametro nella sintassi di una dichiarazione di funzione influisce solo sul dichiaratore puntatore destro per tale parametro. Per influire su altri dichiaratori puntatori, è necessario usare tipi denominati intermedi.
Le funzioni che restituiscono un puntatore possono avere un attributo puntatore come attributo funzione. Gli attributi [unique] e [ptr] devono essere applicati ai tipi restituiti dalla funzione. Le dichiarazioni membro che sono puntatori possono specificare un attributo puntatore come attributo di campo. Un attributo puntatore può essere applicato anche come attributo di tipo nei costrutti typedef .
Quando non viene specificato alcun attributo puntatore come un campo o un attributo di tipo, gli attributi del puntatore vengono applicati in base alle regole per una dichiarazione di puntatore non specificata come indicato di seguito.
In modalità di compatibilità DCE, gli attributi del puntatore vengono determinati nel file IDL definito. Se è presente un attributo [pointer_default**]**specificato nell'interfaccia di definizione, tale attributo viene usato. Se non è presente alcun attributo [pointer_default] , tutti i puntatori non autorizzati sono puntatori completi.
In modalità Estensioni Microsoft, gli attributi del puntatore possono essere determinati importando i file IDL e vengono applicati nell'ordine seguente:
- Attributo puntatore esplicito applicato al sito di utilizzo.
- L'attributo [ref] quando il puntatore non assegnato è un parametro puntatore di primo livello.
- Attributo [pointer_default] specificato nell'interfaccia di definizione.
- Attributo [pointer_default] specificato nell'interfaccia di base.
- Attributo [univoco].
L'attributo dell'interfaccia [pointer_default] specifica gli attributi predefiniti del puntatore da applicare a un dichiaratore puntatore in una dichiarazione di tipo, parametro o restituito quando tale dichiarazione non dispone di un attributo puntatore esplicito applicato. L'attributo dell'interfaccia [pointer_default] non si applica a un puntatore di primo livello non assegnato di un parametro, che si presuppone che sia [ref].