Ponteiros de referência
Os ponteiros de referência são os ponteiros mais simples e exigem a menor quantidade de processamento pelo stub do cliente. Quando um programa cliente passa um ponteiro de referência para um procedimento remoto, o ponteiro de referência sempre contém o endereço de um bloco de memória válido. Ele ainda apontará para o mesmo bloco de memória quando o procedimento remoto for concluído. Esses ponteiros são usados principalmente para implementar semântica de referência e para permitir parâmetros [fora] em C.
No exemplo a seguir, o valor do ponteiro não é alterado durante a chamada, embora o conteúdo dos dados no endereço indicado pelo ponteiro possa ser alterado.
Um ponteiro de referência tem as seguintes características:
- Ele sempre aponta para o armazenamento válido e nunca tem o valor NULL.
- Ele nunca é alterado durante uma chamada e sempre aponta para o mesmo armazenamento antes e depois da chamada.
- Os dados retornados do procedimento remoto são gravados no armazenamento existente.
- O armazenamento apontado por um ponteiro de referência não pode ser acessado por qualquer outro ponteiro ou qualquer outro nome na função.
Use o atributo [ref] para especificar ponteiros de referência em definições de interface, conforme mostrado no exemplo a seguir.
/* IDL file */
[
uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45),
version(1.0)
]
interface RefPtrInterface
{
void RemoteFn([in, out, ref] char *pChar);
}
Este exemplo define o parâmetro pChar como um ponteiro para um único caractere, não uma matriz de caracteres. É um parâmetro [] e um ponteiro de referência que aponta para a memória que o RemoteFn de rotina do servidor preencherá com dados.