Est-il possible de créer une seule instance de l'objet COM, et d'être sûr que tous les appels ultérieurs de n'importe quel client ne seront faits qu'à cette seule instance ?
Réponse
Trop de publicités?Notez que vous devrez faire en sorte que votre objet COM s'exécute en dehors du processus (exposé par un EXE).
Avez-vous vraiment besoin du même objet COM utilisé partout ? Ou voulez-vous simplement contrôler les mêmes ressources sous-jacentes à partir d'un point de contrôle unique ?
COM ne prend pas directement en charge le modèle Singleton, mais il ne l'interdit pas non plus de manière stricte. C'est juste qu'il n'y a pas de paramètre de registre qui dit "toujours servir le même objet". En fait, le mécanisme d'instanciation standard de COM nécessite qu'un objet véritablement nouveau soit renvoyé à chaque fois que vous l'appelez (ce mécanisme est ce que l'on appelle le new
les opérateurs et CreateInstance()
à utiliser en interne) . Cela signifie que pour faire un singleton COM correct, vous ne pouvez pas laisser vos clients le créer eux-mêmes. Tout cela peut être fait, mais c'est délicat et rarement nécessaire.
Votre meilleure chance - c'est amusant - est de ne PAS avoir de COM Singleton du tout. Laissez le client créer autant d'objets différents qu'il le souhaite. Au lieu d'un objet COM unique, autorisez plusieurs objets COM, mais faites de ces objets des "cales" qui communiquent avec une implémentation unique - interne - de l'objet. N'exposez pas du tout l'implémentation interne du singleton directement comme un objet COM. Vous éviterez ainsi de nombreux maux de tête.