Condividi tramite


Pacchetto di gestione della memoria RpcSs

La coppia di allocator/dealloatore predefinita utilizzata dagli stub ed eseguire l'allocazione della memoria per conto dell'applicazione è midl_user_allocate midl_user_free/. È tuttavia possibile scegliere il pacchetto RpcSs anziché il valore predefinito usando l'attributo ACF [enable_allocate]. Il pacchetto RpcSs è costituito da funzioni RPC che iniziano con il prefisso RpcSs o RpcSm. Il pacchetto RpcSs non è consigliato per le applicazioni Windows.

Nota

Il pacchetto di gestione della memoria Rpcss è obsoleto. È consigliabile usare midl_user_allocate e midl_user_free al suo posto.

 

In modalità /osf il pacchetto RpcSs è abilitato per gli stub generati da MIDL automaticamente quando vengono usati puntatori completi, quando gli argomenti richiedono l'allocazione della memoria o come risultato dell'uso dell'attributo [enable_allocate]. Nella modalità predefinita (Microsoft estesa) il pacchetto RpcSs è abilitato solo quando viene usato l'attributo [enable_allocate] . L'attributo [enable_allocate] abilita l'ambiente RpcSs dagli stub lato server. Il lato client viene avvisato della possibilità che il pacchetto RpcSs possa essere abilitato. In modalità /osf il lato client non è interessato.

Quando il pacchetto RpcSs è abilitato, l'allocazione della memoria sul lato server viene eseguita con l'allocatore di memoria RpcSs privato e la coppia dealloatore. È possibile allocare memoria usando lo stesso meccanismo chiamando RpcSmAllocate (o RpcSsAllocate). Al ritorno dal server stub, viene liberata automaticamente tutta la memoria allocata dal pacchetto RpcSs. Nell'esempio seguente viene illustrato come abilitare il pacchetto 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 */

L'applicazione può liberare in modo esplicito la memoria richiamando la funzione RpcSsFree o RpcSmFree . Si noti che queste funzioni non liberano effettivamente memoria. Lo contrassegnano per l'eliminazione. La libreria RPC rilascia la memoria quando il programma chiama RpcSsDisableAllocate o RpcSsDisableAllocate.

È anche possibile abilitare l'ambiente di gestione della memoria per l'applicazione chiamando la routine RpcSmEnableAllocate (e è possibile disabilitarla chiamando la routine RpcSmDisableAllocate ). Dopo aver abilitato, il codice dell'applicazione può allocare e deallocare la memoria chiamando le funzioni dal pacchetto RpcSs.