Règles de gestion de la mémoire
La durée de vie des pointeurs vers les interfaces est toujours gérée via les méthodes AddRef et Release sur chaque interface COM. Pour plus d’informations, consultez Règles de gestion des nombres de références.
Pour tous les autres paramètres, il est important de respecter certaines règles pour gérer la mémoire. Les règles suivantes s’appliquent à tous les paramètres des méthodes d’interface, y compris la valeur de retour qui ne sont pas passées par valeur :
- Les paramètres in-parameters doivent être alloués et libérés par l’appelant.
- Les paramètres sortants doivent être alloués par celui appelé ; ils sont libérés par l’appelant à l’aide de l’allocateur de mémoire de tâche COM standard. Pour plus d’informations, consultez l’allocateur de mémoire OLE.
- Les paramètres entrants/sortants sont initialement alloués par l’appelant, puis libérés et réalloués par celui appelé, si nécessaire. Comme c’est le cas pour les paramètres out, l’appelant est chargé de libérer la valeur retournée finale. L’allocateur de mémoire COM standard doit être utilisé.
Dans les deux derniers cas, où un élément de code alloue la mémoire et un autre élément de code le libère, l’utilisation de l’allocateur COM garantit que les deux éléments de code utilisent les mêmes méthodes d’allocation.
Un autre domaine qui a besoin d’une attention particulière est le traitement des paramètres sortants et in-out dans les conditions d’échec. Si une fonction retourne un code d’échec, l’appelant n’a généralement aucun moyen de nettoyer les paramètres sortants ou in-out. Cela entraîne les règles supplémentaires suivantes :
- En cas de condition d’erreur, les paramètres doivent toujours être définis de manière fiable sur une valeur qui sera nettoyée sans aucune action de l’appelant.
- Tous les paramètres de pointeur out doivent être définis explicitement sur NULL. Ils sont généralement passés dans un paramètre pointeur à pointeur, mais peuvent également être passés en tant que membres d’une structure que l’appelant alloue et le code appelé remplit. La façon la plus simple de s’assurer qu’il s’agit (en partie) de définir ces valeurs sur NULL sur l’entrée de fonction. Cette règle est importante, car elle favorise l’interopérabilité des applications plus robuste.
- Dans les conditions d’erreur, tous les paramètres in-out doivent être laissés seuls par le code appelé (restant ainsi à la valeur à laquelle ils ont été initialisés par l’appelant) ou être explicitement définis, comme dans le cas de retour d’erreur de paramètre out.
N’oubliez pas que ces conventions de gestion de la mémoire pour les applications COM s’appliquent uniquement sur les interfaces publiques et les API ; il n’est pas nécessaire que l’allocation de mémoire strictement interne à une application COM soit effectuée à l’aide de ces mécanismes.
COM utilise en interne les appels de procédure distante (RPC) pour communiquer entre les clients et les serveurs. Pour plus d’informations sur la gestion de la mémoire dans les stubs de serveur RPC, consultez la rubrique Gestion de la mémoire du stub de serveur.
Rubriques connexes
- gestion des d’allocation de mémoire