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 de 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 serem alocados. Aplicativos cliente e 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 desmarcar dados no espaço de endereço do servidor.
  • As chamadas de stub do cliente midl_user_allocate ao desmarcar dados do servidor referenciados 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 for alterado para um valor não nulo durante a chamada. Se o ponteiro [exclusivo] não for nulo na entrada, o stub do cliente gravará os dados associados na memória existente.

Se midl_user_allocate não alocar memória, ele deverá 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 SDK (Platform Software Development Kit) 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 Referência midl.