Pacchetto di gestione della memoria RpcSs
La coppia allocatore/dealloatore predefinita usata dagli stub e il tempo di esecuzione durante l'allocazione della memoria per conto dell'applicazione è midl_user_allocate/midl_user_free. Tuttavia, è possibile scegliere il pacchetto RpcSs anziché l'impostazione predefinita usando l'attributo ACF [enable_allocate]. Il pacchetto RpcSs è costituito da funzioni RPC che iniziano con il prefisso RPCS 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 /osf modalità, il pacchetto RpcSs viene abilitato automaticamente per gli stub generati da MIDL quando vengono usati puntatori completi, quando gli argomenti richiedono l'allocazione di memoria o come risultato dell'uso dell'attributo [enable_allocate]. Nella modalità predefinita (Microsoft estesa) il pacchetto RpcSs viene 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 /osf modalità, il lato client non è interessato.
Quando il pacchetto RpcSs è abilitato, l'allocazione della memoria sul lato server viene eseguita con l'allocatore di gestione della memoria RpcSs privato e la coppia dealloatore. È possibile allocare memoria usando lo stesso meccanismo chiamando RpcSmAllocate (o RpcSsAllocate). Quando viene restituito dallo stub del server, tutta la memoria allocata dal pacchetto RpcSs viene liberata automaticamente. L'esempio seguente illustra 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 funzioneRpcSsFreeo 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 ed è possibile disabilitarla chiamando la routinerpcSmDisableAllocate). Una volta abilitato, il codice dell'applicazione può allocare e deallocare la memoria chiamando le funzioni dal pacchetto RpcSs.