Partager via


Fonction midl_user_allocate

La fonction midl_user_allocate est une procédure qui doit être fournie par les développeurs d’applications RPC. Il alloue de la mémoire pour les stubs RPC et les routines de bibliothèque. Votre fonction midl_user_allocate doit correspondre au prototype suivant :

void __RPC_FAR * __RPC_USER midl_user_allocate (size_t cBytes);

Le paramètre cBytes spécifie le nombre d’octets à allouer. Les applications clientes et les applications serveur doivent implémenter la fonction midl_user_allocate , sauf si vous compilez en mode de compatibilité OSF (/osf). Les applications et les stubs générés appellent des midl_user_allocate directement ou indirectement pour gérer les objets alloués. Par exemple :

  • Les applications clientes et serveurs appellent midl_user_allocate pour allouer de la mémoire à l’application, par exemple lors de la création d’un nœud dans une arborescence ou une liste liée.
  • Le stub du serveur appelle midl_user_allocate lors du démarchant des données dans l’espace d’adressage du serveur.
  • Le stub client appelle midl_user_allocate lors du démarchant des données du serveur référencé par un pointeur [out]. Notez que pour les pointeurs [in], [out] et [unique], le stub client appelle midl_user_allocate uniquement si la valeur du pointeur [unique] était null lors de l’entrée et passe à une valeur non null pendant l’appel. Si le pointeur [unique] n’était pas null lors de l’entrée, le stub client écrit les données associées dans la mémoire existante.

Si midl_user_allocate ne parvient pas à allouer de la mémoire, elle doit retourner un pointeur Null.

La fonction midl_user_allocate doit retourner un pointeur aligné sur 8 octets.

Par exemple, les exemples de programmes fournis avec le Kit de développement logiciel (SDK) de plateforme implémentent midl_user_allocate en termes de malloc de la fonction C :

void __RPC_FAR * __RPC_USER midl_user_allocate(size_t cBytes)
{
    return((void __RPC_FAR *) malloc(cBytes));
}

Notes

Si le package RpcSs est activé (par exemple, en raison de l’utilisation de l’attribut [ enable_allocate], utilisez RpcSmAllocate pour allouer de la mémoire côté serveur. Pour plus d’informations sur [enable_allocate], consultez Référence MIDL.