Udostępnij za pośrednictwem


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.