2010-12-13 104 views
4

Je vais décrire le problème aussi simple que possible; Supposons que nous ayons un client com qui définit plusieurs interfaces.Comment énumérer tous les coclasses qui implémentent une interface COM particulière?

Afin d'améliorer la fonctionnalité de notre client com; plusieurs sociétés indépendantes développent & déploie des serveurs com qui implémente l'interface. Il est possible que la machine cible possède des serveurs com qui implémente la même interface.

Maintenant, voici le problème;

Notre client com n'a aucune idée des serveurs com sur la machine cible car ils auront été développés indépendamment. Mais encore, nous pouvons demander aux entreprises indépendantes de suivre une procédure d'installation spécifique.

Maintenant, voici la question;

Quelle sorte de technique devrions-nous utiliser pour trouver tous les serveurs COM compatibles déployés sur la machine cible, puis instancier les objets requis?

+0

Alors ... ce que vous voulez est la capacité d'énumérer tous les coclasses qui mettent en œuvre une interface donnée? –

+0

@Billy, oui, c'est le problème à résoudre –

+0

Espérons que le titre soit un peu moins sucky. –

Répondre

4

Il n'y a pas de service de catalogage COM standard que je connaisse, bien que COM + puisse avoir quelque chose. Jetez un oeil à HKCR\Component Categories, vous trouverez des GUID du type de composants. Comme 0DE86A57-2BAA-11CF-A229-00AA003D7352, décrit comme "Classe implémente IPersistPropertyBag". Un coclass déclare ce même guid dans son CLSID\{guid}\Implemented Categories. Cela semble être un bon match pour votre scénario.

Vous devriez choisir un guid et en informer les auteurs. Ils doivent écrire la clé Implemented Categories avec leur programme d'installation.

C'est toujours un slog plutôt maladroit avec les clés CLSID, vous ne voulez pas le faire très souvent. Mais au moins, vous n'aurez pas à charger des DLL pour découvrir des interfaces, qui pourraient avoir toutes sortes d'effets secondaires désagréables. Je recommanderais une boîte de dialogue dans votre menu Options qui permet à l'utilisateur de lancer une analyse et de choisir, également un bon moyen de désactiver les composants qui se comportent mal. Btw, la douleur de soutien que cela peut causer rend généralement les applications à partir d'une liste «approuvé».

0

Hans a eu une bonne idée.

Je n'ai jamais utilisé les catégories de composants auparavant, mais je vous suggère d'éviter de toucher directement le registre puisque MS fournit des API pour accéder aux catégories de composants. Check this out:

http://msdn.microsoft.com/en-us/library/ms692551(v=vs.85).aspx