Implémentation de l’interface IUnknown
S’applique à : Outlook 2013 | Outlook 2016
Les méthodes de l’interface IUnknown , implémentées dans chaque objet MAPI, prennent en charge la communication interobject et la gestion des objets.
IUnknown a trois méthodes : IUnknown ::AddRef, IUnknown ::QueryInterface et IUnknown ::Release. QueryInterface permet à un objet de déterminer si un autre objet prend en charge une interface particulière. Avec QueryInterface, deux objets sans connaissance préalable des fonctionnalités de l’autre peuvent interagir. Si l’objet qui implémente QueryInterface prend en charge l’interface en question, il retourne un pointeur vers l’implémentation de l’interface. Si l’objet ne prend pas en charge l’interface demandée, il retourne la valeur MAPI_E_INTERFACE_NOT_SUPPORTED.
Lorsque QueryInterface retourne un pointeur d’interface demandé, il doit également augmenter le nombre de références du nouvel objet. Le nombre de références d’un objet est une valeur numérique utilisée pour gérer la durée de vie de l’objet. Lorsque le nombre de références est supérieur à 1, la mémoire de l’objet ne peut pas être libérée, car elle est activement utilisée. Ce n’est que lorsque le nombre de références passe à 0 que l’objet peut être libéré en toute sécurité.
Les deux autres méthodes IUnknown , AddRef et Release, gèrent le nombre de références. AddRef incrémente le nombre de références, tandis que Release le décrémente. Toutes les méthodes ou fonctions d’API qui retournent des pointeurs d’interface, comme QueryInterface, doivent appeler AddRef pour incrémenter le nombre de références. Toutes les implémentations de méthodes qui reçoivent des pointeurs d’interface doivent appeler Release pour décrémenter le nombre lorsque le pointeur n’est plus nécessaire. La mise en production vérifie un nombre de références existant, libérant la mémoire associée à l’interface uniquement si le nombre est 0.
Remarque
Étant donné qu’AddRef et Release ne sont pas requis pour retourner des valeurs précises, les appelants de ces méthodes ne doivent pas utiliser les valeurs de retour pour déterminer si un objet est toujours valide ou a été détruit.