Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Ponteiros comuns
Um ponteiro comum é definido como tudo menos ponteiros de interface e ponteiros de contagem de bytes.
Há dois layouts possíveis para a descrição:
pointer_type<1> pointer_attributes<1>
simple_type<1> FC_PAD
–ou–
pointer_type<1> pointer_attributes<1>
offset_to_complex_description<2>
O primeiro formato é usado se o ponteiro for um ponteiro para um tipo simples ou um ponteiro de cadeia de caracteres sem tamanho. O segundo formato é usado para ponteiros para todos os outros tipos. Os atributos de ponteiro indicam qual layout de descrição é com o sinalizador FC_SIMPLE_POINTER.
pointer_type<1> é uma das seguintes.
| Formatar caractere | Descrição |
|---|---|
| FC_RP | Um ponteiro de referência. |
| FC_UP | Um ponteiro único. |
| FC_FP | Um ponteiro completo. |
| FC_OP | Um ponteiro exclusivo em uma interface de objeto. |
A razão para distinguir FC_OP é semântica: em interfaces de objeto, um ponteiro [in,out] deve ser liberado antes de desempacotar um novo objeto e atribuir um novo valor de ponteiro.
Pointer_attributes<1> pode ter qualquer uma das bandeiras mostradas na tabela a seguir.
| Atributo | Bandeira | Descrição |
|---|---|---|
| 01 | FC_ALLOCATE_ALL_NODES | O ponteiro faz parte de um esquema de alocação alocar(all_nodes). |
| 02 | FC_DONT_FREE | Um ponteiro alocar(dont_free). |
| 04 | FC_ALLOCED_ON_STACK | Um ponteiro cujo referente é alocado na pilha do stub. |
| 08 | FC_SIMPLE_POINTER | Um ponteiro para um tipo simples ou cadeia de caracteres não dimensionada. Este sinalizador que está sendo definido indica o layout da descrição do ponteiro como o layout de ponteiro simples descrito acima, caso contrário, o formato do descritor com o deslocamento é indicado. |
| 10 | FC_POINTER_DEREF | Um ponteiro que deve ser desreferenciado antes de manipular o referente do ponteiro. |
Os ponteiros que têm size_is(), max_is(), length_is(), last_is() e/ou first_is() aplicados a eles têm descrições de cadeia de caracteres de formato idênticas a um ponteiro para uma matriz do tipo apropriado (por exemplo, uma matriz conforme se size_is() for aplicada, uma matriz variável conforme se size_is() e length_is forem aplicadas).
Ponteiros de interface
Uma cadeia de caracteres de formato de ponteiro de interface de objeto tem um de dois formatos, dependendo se o IID correspondente é conhecido pelo compilador.
Um ponteiro de interface com uma constante IID tem a seguinte descrição:
FC_IP FC_CONSTANT_IID
iid<16>
A parte iid<16> é o IID real para o ponteiro da interface. O iid é gravado na cadeia de caracteres de formato em um formato idêntico à estrutura de dados GUID: longo, curto, curto, char [8].
A descrição de um ponteiro de interface com iid_is() aplicado a ele é:
FC_IP FC_PAD
iid_description<>
O iid_description<> é um descritor de correlação e tem 4 ou 6 bytes, dependendo se /robust é usado. O valor calculado pela função NdrComputeConformance é o ponteiro IID.
Ponteiros de contagem de bytes
Os ponteiros de contagem de bytes estão relacionados a um atributo de otimização especial chamado [byte_count]. São utilizados os seguintes formatos:
FC_BYTE_COUNT_POINTER
simple_type<1>
byte_count_description<>
–e –
FC_BYTE_COUNT_POINTER
FC_PAD
byte_count_description<>
pointee_description<>
O byte_count_description<> é um descritor de correlação e tem 4 ou 6 bytes, dependendo se /robust é usado.
O pointee_description<> é uma descrição do tipo pointee.