Pacote de gerenciamento de memória RpcSs

O par alocador/desalocador padrão usado pelos stubs e o tempo de execução ao alocar memória em nome do aplicativo é midl_user_allocate/midl_user_free. No entanto, você pode escolher o pacote RpcSs em vez do padrão usando o atributo ACF [enable_allocate]. O pacote RpcSs consiste em funções RPC que começam com o prefixo RpcSs ou RpcSm. O pacote RpcSs não é recomendado para aplicativos do Windows.

Observação

O Pacote de Gerenciamento de Memória Rpcss está obsoleto. É recomendável que midl_user_allocate e midl_user_free sejam usados em seu lugar.

 

No modo /osf , o pacote RpcSs é habilitado para stubs gerados por MIDL automaticamente quando ponteiros completos são usados, quando os argumentos exigem alocação de memória ou como resultado do uso do atributo [enable_allocate] . No modo padrão (estendido pela Microsoft), o pacote RpcSs é habilitado somente quando o atributo [enable_allocate] é usado. O atributo [enable_allocate] habilita o ambiente RpcSs pelos stubs do lado do servidor. O lado do cliente fica alertado sobre a possibilidade de que o pacote RpcSs possa estar habilitado. No modo /osf , o lado do cliente não é afetado.

Quando o pacote RpcSs está habilitado, a alocação de memória no lado do servidor é realizada com o alocador de gerenciamento de memória RpcSs privado e o par de desalocador. Você pode alocar memória usando o mesmo mecanismo chamando RpcSmAllocate (ou RpcSsAllocate). Após o retorno do stub do servidor, toda a memória alocada pelo pacote RpcSs é liberada automaticamente. O exemplo a seguir mostra como habilitar o pacote RpcSs:

/* ACF file fragment */

[ 
    implicit_handle(handle_t GlobalHandle),
    enable_allocate
]
interface iface
{
}

/*Server management routine fragment. Replaces p=midl_user_allocate(size); */

    p=RpcSsAllocate(size);                /*raises exception */
    p=RpcSmAllocate(size, &status);       /*returns error code */

Seu aplicativo pode liberar memória explicitamente invocando a função RpcSsFree ou RpcSmFree . Observe que essas funções não liberam memória. Eles marcam para exclusão. A biblioteca RPC libera a memória quando seu programa chama RpcSsDisableAllocate ou RpcSsDisableAllocate.

Você também pode habilitar o ambiente de gerenciamento de memória para seu aplicativo chamando a rotina RpcSmEnableAllocate (e pode desabilitá-lo chamando a rotina RpcSmDisableAllocate ). Depois de habilitado, o código do aplicativo pode alocar e desalocar a memória chamando funções do pacote RpcSs.