Atrybuty tablicy i Sized-Pointer
MIDL udostępnia bogaty zestaw funkcji do przekazywania tablic danych i wskaźników do danych. Za pomocą tych atrybutów można określić cechy tablic i wiele poziomów wskaźników.
Atrybut | Zwyczaj |
---|---|
size_is | Określa ilość pamięci do przydzielenia dla wskaźników wielkości, wskaźników wielkości do wskaźników wielkości oraz tablic jednowymiarowych lub wielowymiarowych. |
max_is | Maksymalna wartość indeksu tablicy. |
length_is | Liczba elementów tablicy, które mają być przesyłane. |
first_is | Indeks pierwszego elementu tablicy, który ma zostać przesłany. |
last_is | Nadaje indeks ostatniego elementu tablicy do przesyłania. |
ciągu | Wskazuje, że tablica jednowymiarowych znaków, wchar_t, bajtów (lub równoważnej) tablicy lub wskaźnik do takiej tablicy ma być obsługiwany jako ciąg. |
zakres | Określa zakres dozwolonych wartości dla argumentów lub pól, których wartości są ustawiane w czasie wykonywania. |
MidL obsługuje trzy rodzaje wskaźników: wskaźniki referencyjne, unikatowe wskaźniki i pełne wskaźniki. Te wskaźniki są określane przez atrybuty wskaźnika ref, unikatowychi ptr.
Atrybut wskaźnika można zastosować jako atrybut typu; jako atrybut pola, który ma zastosowanie do składowej struktury, składowej unii lub parametru; lub jako atrybut funkcji, który ma zastosowanie do zwracanego typu funkcji. Atrybut wskaźnika może być również wyświetlany za pomocą słowa kluczowego pointer_default.
Aby zezwolić parametrowi wskaźnika na zmianę wartości podczas funkcji zdalnej, należy podać kolejny poziom pośredni, podając wiele deklaratorów wskaźników. Jawny atrybut wskaźnika zastosowany do parametru ma wpływ tylko na najbardziej prawy deklarator wskaźnika dla parametru. Jeśli w deklaracji parametru istnieje wiele deklaratorów wskaźników, inne deklaratory domyślnie do atrybutu wskaźnika określonego przez atrybut pointer_default. Aby zastosować różne atrybuty wskaźnika do wielu deklaratorów wskaźników, należy zdefiniować typy pośrednie określające jawne atrybuty wskaźnika.
Domyślne wartości Pointer-Attribute
Jeśli żaden atrybut wskaźnika nie jest skojarzony ze wskaźnikiem, który jest parametrem, przyjmuje się, że wskaźnik jest wskaźnikiem ref.
Jeśli żaden atrybut wskaźnika nie jest skojarzony ze wskaźnikiem, który jest elementem członkowskim struktury lub unii, kompilator MIDL przypisuje atrybuty wskaźnika przy użyciu następujących reguł priorytetu (1 jest najwyższy):
- Atrybuty jawnie stosowane do typu wskaźnika
- Atrybuty jawnie stosowane do parametru wskaźnika lub elementu członkowskiego
- Atrybut pointer_default w pliku IDL, który definiuje typ
- Atrybut pointer_default w pliku IDL, który importuje typ
- ptr (tryb osf); unikatowy (tryb domyślny RPC firmy Microsoft)
Gdy plik IDL jest kompilowany w trybie domyślnym, zaimportowane pliki mogą dziedziczyć atrybuty wskaźnika z importowania plików. Ta funkcja nie jest dostępna podczas kompilowania przy użyciu przełącznikaosf /. Aby uzyskać więcej informacji, zobacz import.
Typy zwracane przez funkcję
Wskaźnik zwracany przez funkcję musi być wskaźnikiem unikatowym wskaźnikiem lub pełnym wskaźnikiem. Kompilator MIDL zgłasza błąd, jeśli wynik funkcji jest wskaźnikiem odniesienia, jawnie lub domyślnie. Zwrócony wskaźnik zawsze wskazuje nowy magazyn.
Funkcje zwracające wartość wskaźnika mogą określać atrybut wskaźnika jako atrybut funkcji. Jeśli atrybut wskaźnika nie jest obecny, wskaźnik wyniku funkcji używa wartości podanej jako atrybut pointer_default.
Atrybuty wskaźnika w definicjach typów
Po określeniu atrybutu wskaźnika na najwyższym poziomie typedef instrukcji, określony atrybut jest stosowany do deklaratora wskaźnika zgodnie z oczekiwaniami. Jeśli nie określono atrybutu wskaźnika, deklaratory wskaźnika na najwyższym poziomie instrukcji typedef dziedziczą typ atrybutu wskaźnika, gdy jest używany.
Język DCE IDL nie zezwala na jawne stosowanie tego samego atrybutu wskaźnika dwa razy — na przykład w deklaracjitypedefi na liście atrybutów parametrów. Jeśli używasz domyślnego trybu (rozszerzenia firmy Microsoft) kompilatora MIDL, to ograniczenie zostanie złagodzone.
Aby zapoznać się z omówieniem używania tablic i wskaźników MIDL w zdalnych wywołaniach procedur, zobacz Tablice i wskaźniki.