Tre pekartyper
MIDL har stöd för tre typer av pekare för en mängd olika program. De tre olika nivåerna kallas referens, unika och fullständiga pekare och anges av attributen [ref], [unika], och [ptr], respektive . Pekarklasserna som beskrivs av dessa attribut är ömsesidigt uteslutande. Pekarattribut kan användas för pekare i typdefinitioner, funktionsreturtyper, funktionsparametrar, medlemmar i strukturer, fackföreningar eller matriselement.
Inbäddade pekare är pekare som är medlemmar i strukturer eller fackföreningar. De kan också vara element i matriser. I [i] riktning antas inbäddade [ref] pekare peka på giltigt lagringsutrymme och får inte vara null. Den här situationen gäller rekursivt för alla [ref] pekare som de pekar på. I [i] riktning kan inbäddade [unika] och fullständiga pekare (pekare med attributet [ptr]) vara null.
Alla pekarattribut som placeras på en parameter i syntaxen för en funktionsdeklaration påverkar endast pekardeklaratorn till höger för den parametern. För att påverka andra pekardeklaratorer måste mellanliggande namngivna typer användas.
Funktioner som returnerar en pekare kan ha ett pekarattribut som ett funktionsattribut. Attributen [unik] och [ptr] måste tillämpas på funktionsreturtyper. Medlemsdeklarationer som är pekare kan ange ett pekarattribut som ett fältattribut. Ett pekarattribut kan också användas som ett typattribut i typedef konstruktioner.
När inget pekarattribut anges som ett fält- eller typattribut tillämpas pekarattribut enligt reglerna för en icke-distribuerad pekardeklaration enligt följande.
I DCE-kompatibilitetsläge bestäms pekarattribut i den definierande IDL-filen. Om det finns ett [pointer_default**]**-attribut som anges i det definierande gränssnittet används det attributet. Om det inte finns någon [pointer_default] attribut, är alla oattributerade pekare fullständiga pekare.
I Microsoft-tilläggsläge kan pekarattribut fastställas genom att importera IDL-filer och tillämpas i följande ordning:
- Ett explicit pekarattribut som används på användningsplatsen.
- Attributet [ref] när den oattributerade pekaren är en pekarparameter på toppnivå.
- Ett [pointer_default] attribut som anges i det definierande gränssnittet.
- Ett [pointer_default] attribut som anges i basgränssnittet.
- Attributet [unikt].
[pointer_default] gränssnittsattribut anger standardpekarattributen som ska tillämpas på en pekardeklarator i en typ, parameter eller returtypdeklaration när den deklarationen inte har något explicit pekarattribut tillämpat på den. Attributet [pointer_default] gränssnitt gäller inte för en oattributerad toppnivåpekare för en parameter, som antas vara [ref].