Share via


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 [out] 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.

alteração de dados em um endereço de ponteiro de referência estático

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 nenhum 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 [out] e um ponteiro de referência que aponta para a memória que o RemoteFn de rotina do servidor preencherá com os dados.