Udostępnij za pośrednictwem


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):

  1. Atrybuty jawnie stosowane do typu wskaźnika
  2. Atrybuty jawnie stosowane do parametru wskaźnika lub elementu członkowskiego
  3. Atrybut pointer_default w pliku IDL, który definiuje typ
  4. Atrybut pointer_default w pliku IDL, który importuje typ
  5. 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.