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 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 rpcS ou RpcSm. Le package RpcSs n’est pas recommandé pour les applications Windows.
Note
Le package de gestion de la mémoire Rpcss est obsolète. Il est recommandé d’utiliser midl_user_allocate et midl_user_free à sa place.
En mode /osf, le package RpcSs est activé automatiquement 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 (Étendu Microsoft), 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 devient averti de la possibilité que le package RpcSs puisse être 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 l’allocateur de gestion de la mémoire RpcSs privé et la paire deallocator. Vous pouvez allouer de la mémoire à l’aide du même mécanisme en appelant RpcSmAllocate (ou RpcSsAllocate). Lors du retour du stub du serveur, toutes les mémoires allouées par le package RpcSs sont automatiquement libérées. 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 fonctionRpcSsFreeou fonction RpcSmFree. Notez que ces fonctions ne libèrent pas réellement 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 de l’application peut allouer et libérer de la mémoire en appelant des fonctions à partir du package RpcSs.