2009-09-23 6 views
2

Je suis en train de faire de l'interopérabilité COM à partir d'une application C# et je n'arrive pas à trouver la réponse à cette question.Documentation pour les implémenteurs d'interfaces COM

Je me demandais où je pourrais trouver dans la documentation Win32 qui concrétisent les implémentations qui existent d'une interface COM. Par exemple, je sais (grâce à goodgle) que IShellLinkW est implémenté par une classe identifiée par CLSID_ShellLink, que IObjectArray est implémenté par CLSID_EnumerableObjectCollection et ainsi de suite.

Cependant, comment dois-je savoir? J'ai la version de Windows SDK (dernière version) installée et je ne peux pas sembler comprendre comment je devais comprendre cela basé sur l'information dans les docs?

Répondre

0

Je ne pense pas que ce que vous voulez est possible sans charger chaque objet COM dans le système et lui demander une liste des classes qu'il a et quelles interfaces ils implémenter. Ces informations, pour autant que je sache, ne sont pas stockées dans le Registre (l'endroit où toutes les informations COM externes sont stockées).

Si vous pouviez donner un exemple concret de ce que vous essayez d'accomplir, il se pourrait que ce soit une solution alternative. Si vous voulez simplement savoir quelles interfaces sont implémentées par une classe particulière ou .dll, vous pouvez le faire avec un téléspectateur tel que oleview

1

Pourquoi avez-vous besoin de savoir? Les utilitaires d'importation comme tlbimp.exe calculent les détails nécessaires à partir des informations de type exe ou dll et créent des wrappers qui couvrent cela pour vous.

Regardez l'exemple TlbImp à COM Interop Part 1: C# Client Tutorial:

+0

Je fais des déclarations d'interopérabilité manuelles mais le plus que je veux savoir, parce que j'aime savoir comment les choses fonctionnent sous les couvertures ... donc la question reste ... prendre une interface com donnée, comment puis-je savoir quelles classes concrètes les implémentent, donc je sais quoi créer .. – TheCodeJunkie

+0

Les images PE activées pour COM ont une ressource à l'intérieur qui décrit les identificateurs CLSIID et IID pris en charge (TypeLib). Des outils comme regsrv peuvent ajouter les informations necessray dans le registre, des outils comme TlbImp l'utilisent pour créer un wrapper lib ou une DLL gérée. Les installateurs contiennent également cette information dans leur base de données (voir http://msdn.microsoft.com/en-us/library/aa372092%28VS.85%29.aspx) et ajoutent l'information encessary au registre. –

+0

Pour l'ensemble du scénario d'interopérabilité gérée, ce n'est pas pertinent pour la question (c'était juste un peu d'arrière-plan) et je sais tout sur les fichiers IDL, typelibs, outils d'importation et ainsi de suite. Développeur C++, connaissez-vous les classes concrètes? Dire que je lis les docs et voir l'interface IShellLinkW et aller "Hmm cooool, je veux utiliser ça!", Alors comment saurais-je pour créer une instance de CLSID_ShellLink? Ou plus obscur, allez à IObjectArray/IObjectColleciton -> CLSID_EnumerableObjectCollection? Il doit être mentionné quelque part dans les documents, mais où? :) merci – TheCodeJunkie

0

la plupart des objets COM norme IID et CLSID sont répertoriés dans Uuid.lib, inclus dans Windows SDK. Ainsi, vous pouvez écrire une application simple en les imprimant pour vous.

De plus, vous pouvez ouvrir regedit, aller à HKCR \ Interface et y analyser les enregistrements.