Trzy typy wskaźników
Aplikacja MIDL obsługuje trzy typy wskaźników, aby pomieścić szeroką gamę aplikacji. Trzy różne poziomy są nazywane odwołaniami, unikatowymi i pełnymi wskaźnikami i są wskazywane przez atrybuty [ref], [unikatowe]i [ptr]. Klasy wskaźnika opisane przez te atrybuty wzajemnie się wykluczają. Atrybuty wskaźnika można stosować do wskaźników w definicjach typów, typach zwracanych funkcji, parametrach funkcji, elementach członkowskich struktur lub związkach lub elementach tablicy.
Wskaźniki osadzone to wskaźniki, które są elementami członkowskimi struktur lub związków. Mogą być również elementami tablic. W [w] kierunku osadzonych [ref] wskaźników przyjmuje się wskazywać prawidłowy magazyn i nie może mieć wartości null. Ta sytuacja ma zastosowanie rekursywnie do wszystkich [ref] wskaźników, do których wskazują. W [w] kierunku osadzone [unikatowe] i pełne wskaźniki (wskaźniki z atrybutem [ptr]) mogą być zerowe.
Każdy atrybut wskaźnika umieszczony na parametrze w składni deklaracji funkcji ma wpływ tylko na najbardziej prawy deklarator wskaźnika dla tego parametru. Aby wpłynąć na inne deklaratory wskaźników, należy użyć pośrednich typów nazwanych.
Funkcje zwracające wskaźnik mogą mieć atrybut wskaźnika jako atrybut funkcji. Atrybuty [unikatowe] i [ptr] muszą być stosowane do typów zwracanych funkcji. Deklaracje składowe, które są wskaźnikami, mogą określać atrybut wskaźnika jako atrybut pola. Atrybut wskaźnika można również zastosować jako atrybut typu w konstrukcjach typedef.
Jeśli atrybut wskaźnika nie jest określony jako atrybut pola lub typu, atrybuty wskaźnika są stosowane zgodnie z regułami deklaracji wskaźnika nieprzydatnego w następujący sposób.
W trybie zgodności DCE atrybuty wskaźnika są określane w definiującym pliku IDL. Jeśli istnieje [pointer_default**]**atrybut określony w interfejsie definiującym, ten atrybut jest używany. Jeśli nie ma [pointer_default] atrybutu, wszystkie nieprzydatne wskaźniki są pełnymi wskaźnikami.
W trybie rozszerzeń firmy Microsoft atrybuty wskaźnika można określić przez zaimportowanie plików IDL i są stosowane w następującej kolejności:
- Jawny atrybut wskaźnika zastosowany w lokacji użycia.
- Atrybut [ref], gdy wskaźnik bez atrybutu jest parametrem wskaźnika najwyższego poziomu.
- Atrybut [pointer_default] określony w interfejsie definiującym.
- Atrybut [pointer_default] określony w interfejsie podstawowym.
- Atrybut [unikatowy].
Atrybut interfejsu [pointer_default] określa domyślne atrybuty wskaźnika, które mają być stosowane do deklaratora wskaźnika w deklaracji typu, parametru lub zwracania, gdy ta deklaracja nie ma jawnego atrybutu wskaźnika zastosowanego do niego. Atrybut interfejsu [pointer_default] nie ma zastosowania do nieprzydatnego wskaźnika najwyższego poziomu parametru, który przyjmuje się, że jest [ref].