2011-02-10 5 views
2

J'ai une classe COM. Il peut être accédé par des processus extérieurs au mien. Chaque processus crée sa propre instance de la classe. Est-il un moyen d'avoir un objet COM qui est partagé entre tous les processus que CreateInstance() il?Instance unique de classe ATL COM

COM Singleton est la seule chose qui vient à l'esprit. Cependant, je n'ai aucune expérience en utilisant ceci.

Répondre

2

La base de code I héritée accomplit cela en déclarant une instance «implémentation» statique dans le projet COM.

La classe COM offre simplement une interface à cette instance. De cette façon, plusieurs instances de la classe COM fournissent effectivement un accès à un objet d'implémentation Singleton dans le serveur COM.

Notez que cela nécessite souvent des constructions de synchronisation. COM de singleton dans un serveur hors processus.

+0

Est-ce que CreateInstance (..., CLSCTX_SERVER, ...) accomplirait la même chose? Fondamentalement l'instance vit du côté du serveur et les clients se connectent seulement à lui? – MarkP

+0

Si c'est dans une DLL, non, il échouera. CLSCTX_SERVER implique qu'un serveur EXE autonome existe et peut être exécuté en tant que processus. COM + est votre ami ici. –

+0

Est-ce que DECLARE_CLASSFACTORY_SINGLETON est la réponse? Va-t-il permettre à une seule instance de vivre entre mon code C++ et le code client JScript? – MarkP

0

Si le serveur est déjà implémenté dans une DLL, envisagez d'utiliser COM + pour le configurer comme étant hors processus. De cette façon, vous obtiendrez le meilleur des deux mondes.

+0

J'ai un EXE avec mon objet COM défini dedans. Il y aura du JScript qui instancie l'objet (ou en obtient une référence, s'il existe déjà) et l'utilise. Dans mon EXE, le code de similarité (C++) créera ou obtiendra une référence à un objet déjà existant. – MarkP

+0

L'objet est-il déjà un singleton? –

Questions connexes