Ukazatele (RPC)
Běžné ukazatele
Běžný ukazatel je definován jako vše ostatní než ukazatele rozhraní a ukazatele počtu bajtů.
Popis obsahuje dvě možná rozložení:
pointer_type<1> pointer_attributes<1>
simple_type<1> FC_PAD
–nebo–
pointer_type<1> pointer_attributes<1>
offset_to_complex_description<2>
První formát se použije, pokud je ukazatel ukazatelem na jednoduchý typ nebo nesized řetězcový ukazatel. Druhý formát se používá pro ukazatele na všechny ostatní typy. Atributy ukazatele označují, které rozložení popisu je s příznakem FC_SIMPLE_POINTER.
pointer_type<1> je jedna z následujících možností.
Formát znaku | Popis |
---|---|
FC_RP | Ukazatel odkazu. |
FC_UP | Jedinečný ukazatel. |
FC_FP | Úplný ukazatel. |
FC_OP | Jedinečný ukazatel v rozhraní objektu. |
Důvod k rozlišení FC_OP je sémantický: v rozhraních objektů by měl být ukazatel [in;out] uvolněn před zrušením vymezení nového objektu a přiřazením nové hodnoty ukazatele.
Pointer_attributes<1> může mít některý z příznaků zobrazených v následující tabulce.
Atribut | Vlajka | Popis |
---|---|---|
01 | FC_ALLOCATE_ALL_NODES | Ukazatel je součástí schématu přidělení (all_nodes). |
02 | FC_DONT_FREE | Ukazatel přidělení(dont_free). |
04 | FC_ALLOCED_ON_STACK | Ukazatel, jehož odkaz je přidělen v zásobníku zástupných procedur. |
08 | FC_SIMPLE_POINTER | Ukazatel na jednoduchý typ nebo nesized vyhovující řetězec. Tato sada příznaků označuje rozložení popisu ukazatele jako jednoduché rozložení ukazatele popsané výše, jinak je označen formát popisovače s posunem. |
10 | FC_POINTER_DEREF | Ukazatel, který musí být před zpracováním odkazovaného ukazatele dereference. |
U ukazatelů, u kterých jsou použité size_is(), max_is(), length_is(), last_is() a/nebo first_is(), jsou popisy řetězců formátu identické s ukazatelem na matici příslušného typu (například odpovídající matice, pokud je použita size_is(), odpovídající matice, pokud je použita size_is() a length_is).
Ukazatele rozhraní
Řetězec formátu ukazatele rozhraní objektu má jeden ze dvou formátů v závislosti na tom, zda je odpovídající identifikátor IID známý kompilátoru.
Ukazatel rozhraní s konstantou IID má následující popis:
FC_IP FC_CONSTANT_IID
iid<16>
Iid<16> část je skutečný IID pro ukazatel rozhraní. Iid se zapíše do formátového řetězce ve formátu shodném s datovou strukturou GUID: long, short, short, char [8].
Popis ukazatele rozhraní s iid_is() použitým na něj je:
FC_IP FC_PAD
iid_description<>
Iid_description<> je popisovač korelace a má 4 nebo 6 bajtů v závislosti na tom, jestli se používá /robustní. Hodnota vypočítaná funkcí NdrComputeConformance je ukazatel IID.
Ukazatele počtu bajtů
Ukazatele počtu bajtů se vztahují ke speciálnímu atributu optimalizace s názvem [byte_count]. Používají se následující formáty:
FC_BYTE_COUNT_POINTER
simple_type<1>
byte_count_description<>
–a–
FC_BYTE_COUNT_POINTER
FC_PAD
byte_count_description<>
pointee_description<>
Byte_count_description<> je popisovač korelace a má 4 nebo 6 bajtů v závislosti na tom, jestli se používá /robustní.
Pointee_description<> je popis typu pointee.