Package de gestion de la mémoire RpcSs
La paire allocator/deallocator par défaut utilisée par les stubs et l’heure d’exécution lors de l’allocation de la mémoire pour le compte de l’application est midl_user_allocate/midl_user_free. Toutefois, vous pouvez choisir le package RpcSs au lieu de la valeur par défaut à l’aide de l’attribut ACF [enable_allocate]. Le package RpcSs se compose de fonctions RPC qui commencent par le préfixe RpcSs ou RpcSm. Le package RpcSs n’est pas recommandé pour les applications Windows.
Notes
Le package de gestion de la mémoire Rpcss est obsolète. Il est recommandé d’utiliser des midl_user_allocate et des midl_user_free à leur place.
En mode /osf, le package RpcSs est automatiquement activé pour les stubs générés par MIDL lorsque des pointeurs complets sont utilisés, lorsque les arguments nécessitent une allocation de mémoire ou à la suite de l’utilisation de l’attribut [enable_allocate]. En mode par défaut (Microsoft étendu), le package RpcSs est activé uniquement lorsque l’attribut [enable_allocate] est utilisé. L’attribut [enable_allocate] active l’environnement RpcSs par les stubs côté serveur. Le côté client est averti de la possibilité que le package RpcSs soit activé. En mode /osf , le côté client n’est pas affecté.
Lorsque le package RpcSs est activé, l’allocation de mémoire côté serveur est effectuée avec la paire d’allocations de gestion de la mémoire RpcSs privée et de deallocator. Vous pouvez allouer de la mémoire à l’aide du même mécanisme en appelant RpcSmAllocate (ou RpcSsAllocate). Au retour du stub du serveur, toute la mémoire allouée par le package RpcSs est automatiquement libérée. L’exemple suivant montre comment activer le package 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 */
Votre application peut libérer explicitement de la mémoire en appelant la fonction RpcSsFree ou RpcSmFree . Notez que ces fonctions ne libèrent pas de mémoire. Ils le marquent pour suppression. La bibliothèque RPC libère la mémoire lorsque votre programme appelle RpcSsDisableAllocate ou RpcSsDisableAllocate.
Vous pouvez également activer l’environnement de gestion de la mémoire pour votre application en appelant la routine RpcSmEnableAllocate (et vous pouvez la désactiver en appelant la routine RpcSmDisableAllocate ). Une fois activé, le code d’application peut allouer et libérer la mémoire en appelant des fonctions à partir du package RpcSs.