Partilhar via


A função midl_user_allocate

A função midl_user_allocate é um procedimento que deve ser fornecido por desenvolvedores de aplicativos RPC. Ele aloca memória para os stubs RPC e rotinas de biblioteca. Sua função midl_user_allocate deve corresponder ao seguinte protótipo:

void __RPC_FAR * __RPC_USER midl_user_allocate (size_t cBytes);

O parâmetro cBytes especifica o número de bytes a alocar. Os aplicativos cliente e os aplicativos de servidor devem implementar a função midl_user_allocate, a menos que você esteja compilando no modo de compatibilidade com OSF (/osf). Aplicativos e stubs gerados chamam midl_user_allocate direta ou indiretamente para gerenciar objetos alocados. Por exemplo:

  • Os aplicativos cliente e servidor chamam midl_user_allocate para alocar memória para o aplicativo, como ao criar um novo nó em uma árvore ou lista vinculada.
  • O stub do servidor chama midl_user_allocate ao desempacotar dados no espaço de endereçamento do servidor.
  • O stub do cliente chama midl_user_allocate ao desempacotar dados do servidor que é referenciado por um ponteiro [out]. Observe que, para ponteiros [in], [out] e [unique], as chamadas de stub do cliente midl_user_allocate somente se o valor do ponteiro [exclusivo] for nulo na entrada e mudar para um valor não nulo durante a chamada. Se o ponteiro [exclusivo] não era nulo na entrada, o stub do cliente grava os dados associados na memória existente.

Se midl_user_allocate não conseguir alocar memória, ele deve retornar um ponteiro nulo.

A função midl_user_allocate deve retornar um ponteiro alinhado de 8 bytes.

Por exemplo, os programas de exemplo fornecidos com o Platform Software Development Kit (SDK) implementam midl_user_allocate em termos da função C malloc:

void __RPC_FAR * __RPC_USER midl_user_allocate(size_t cBytes)
{
    return((void __RPC_FAR *) malloc(cBytes));
}

Observação

Se o pacote RpcSs estiver habilitado (por exemplo, como resultado do uso do atributo [ enable_allocate], use RpcSmAllocate para alocar memória no lado do servidor. Para obter informações adicionais sobre [enable_allocate], consulte de referência do MIDL .