Wskaźniki (RPC)
Typowe wskaźniki
Wspólny wskaźnik jest definiowany jako wszystko inne niż wskaźniki interfejsu i wskaźniki liczby bajtów.
Opis obejmuje dwa możliwe układy:
pointer_type<1> pointer_attributes<1>
simple_type<1> FC_PAD
–lub–
pointer_type<1> pointer_attributes<1>
offset_to_complex_description<2>
Pierwszy format jest używany, jeśli wskaźnik jest wskaźnikiem do prostego typu lub niezwiązanego wskaźnika ciągu. Drugi format jest używany dla wskaźników do wszystkich innych typów. Atrybuty wskaźnika wskazują, który układ opisu ma flagę FC_SIMPLE_POINTER.
pointer_type<1> jest jedną z następujących czynności.
Formatuj znak | Opis |
---|---|
FC_RP | Wskaźnik odniesienia. |
FC_UP | Unikatowy wskaźnik. |
FC_FP | Pełny wskaźnik. |
FC_OP | Unikatowy wskaźnik w interfejsie obiektu. |
Przyczyną odróżnienia FC_OP jest semantyka: w interfejsach obiektów wskaźnik [in,out] powinien zostać uwolniony przed usunięciem nowego obiektu i przypisaniem nowej wartości wskaźnika.
Pointer_attributes<1> może mieć dowolną flagę pokazaną w poniższej tabeli.
Atrybut | Flaga | Opis |
---|---|---|
01 | FC_ALLOCATE_ALL_NODES | Wskaźnik jest częścią schematu alokacji przydzielenia (all_nodes). |
02 | FC_DONT_FREE | Wskaźnik przydzielenia (dont_free). |
04 | FC_ALLOCED_ON_STACK | Wskaźnik, którego odwołanie jest przydzielane na stosie wycinka. |
08 | FC_SIMPLE_POINTER | Wskaźnik do prostego typu lub niezgodnego ciągu. Ta ustawiona flaga wskazuje układ opisu wskaźnika jako prosty układ wskaźnika opisany powyżej. W przeciwnym razie wskazywany jest format deskryptora z przesunięciem. |
10 | FC_POINTER_DEREF | Wskaźnik, który musi zostać wyłuszony przed obsługą odwołania wskaźnika. |
Wskaźniki, które mają size_is(), max_is(), length_is(), last_is() i/lub first_is() mają zastosowane opisy ciągów formatu identyczne z wskaźnikiem do tablicy odpowiedniego typu (na przykład zgodna tablica, jeśli size_is() jest stosowana, zgodna tablica, jeśli size_is() i length_is).
Wskaźniki interfejsu
Ciąg formatu wskaźnika interfejsu obiektu ma jeden z dwóch formatów, w zależności od tego, czy odpowiedni identyfikator IID jest znany kompilatorowi.
Wskaźnik interfejsu z stałym identyfikatorem IID ma następujący opis:
FC_IP FC_CONSTANT_IID
iid<16>
Identyfikator iid<16> części jest rzeczywistym identyfikatorem IID wskaźnika interfejsu. Identyfikator jest zapisywany w ciągu formatu w formacie identycznym ze strukturą danych GUID: long, short, short, char [8].
Opis wskaźnika interfejsu z zastosowanym iid_is() to:
FC_IP FC_PAD
iid_description<>
Iid_description<> jest deskryptorem korelacji i ma 4 lub 6 bajtów w zależności od tego, czy jest używany /robust. Wartość obliczana przez funkcję NdrComputeConformance to wskaźnik IID.
Wskaźniki liczby bajtów
Wskaźniki liczby bajtów odnoszą się do specjalnego atrybutu optymalizacji o nazwie [byte_count]. Używane są następujące formaty:
FC_BYTE_COUNT_POINTER
simple_type<1>
byte_count_description<>
–i–
FC_BYTE_COUNT_POINTER
FC_PAD
byte_count_description<>
pointee_description<>
Byte_count_description<> jest deskryptorem korelacji i ma 4 lub 6 bajtów w zależności od tego, czy jest używana /robust.
Pointee_description<> jest opisem typu pointee.