Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Ao contrário ponteiros de exclusivos, ponteiros completos dão suporte ao aliasing. Isso significa que vários ponteiros podem se referir aos mesmos dados, conforme mostrado na figura a seguir:
Um ponteiro completo tem as seguintes características:
- Ele pode ter o valor nulo.
- Ele pode mudar de nulo para não nulo durante a chamada. Quando o valor é alterado para não nulo, o stub do cliente aloca nova memória alocada no retorno. O programa cliente deve liberar essa memória antes de terminar.
- Ele pode mudar de não nulo para nulo durante a chamada. Quando o valor é alterado para nulo, o aplicativo é responsável por liberar a memória.
- O valor pode ser alterado de um valor não nulo para outro.
- O armazenamento para o qual um ponteiro completo aponta pode ser acessado por outro ponteiro ou nome na operação.
- Os dados de retorno serão gravados no armazenamento existente se o ponteiro não tiver o valor nulo.
Use o atributo [ ptr ] para especificar um ponteiro completo, conforme mostrado no exemplo a seguir:
/* IDL file */
[
uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45),
version(1.0)
]
interface FullPtrInterface
{
void RemoteFn([in,ptr,string]) char *ptrName1,
[in,ptr,string] char *ptrName2);
}
Neste exemplo, os parâmetros ptrName1 e ptrName2 são definidos como ponteiros completos para uma cadeia de caracteres. É possível que ambos os ponteiros apontem para o mesmo endereço de memória que contém uma única cadeia de caracteres.
[ptr] é necessário ao fornecer suporte de aliasing. No entanto, como ele requer o maior processamento de todos os ponteiros disponíveis no RPC, ele não é recomendado para a maioria dos aplicativos.