Est-il possible pour un consommateur d'énumérer toutes les interfaces implémentées par un objet COM donné?Comment puis-je détecter toutes les interfaces implémentées par un objet COM?
Répondre
Vous pouvez essayer IDispatch/IDispatchEx si vous voulez simplement savoir quelles méthodes sont appelables par votre consommateur.
Dans COM, la méthode QueryInterface sur IUnknown n'est pas nécessaire pour exposer quelles interfaces il peut renvoyer. Vous en demandez un basé sur son IID et vous l'obtenez ou non. L'implémentation de QI dans un objet COM particulier varie considérablement bien qu'il soit supposé suivre le modèle décrit par Microsoft ici - http://msdn.microsoft.com/en-us/library/ms682521%28VS.85%29.aspx.
Dependency Walker peut faire le travail pour vous ...
http://theircorp.byethost11.com/index.php?vw=TypeLib est un outil gratuit pour examiner les fichiers TBL.
Est-ce que Dependency Walker a une fonctionnalité pour cela? –
Dependency Walker n'affichera pas les interfaces car les seules exportations sont DllGetClassObject, DllRegisterServer, etc. (pour COM hébergé par DLL).
Vous pouvez, comme le dit Weismat, inspecter les fichiers TLB. De nombreux objets COM contiennent des typelibs incorporés dans la section de ressource de l'exécutable. Avec un outil tel que le pirate de ressources, vous pouvez extraire les TLB et utiliser les fonctions COM LoadTypeLib pour obtenir un pointeur vers l'interface ITypeLib (vous pouvez utiliser LoadTypeLib/LoadTypeLibEx directement avec une DLL COM ou EXE, bien sûr).
Avec cette interface, vous pouvez parcourir les types contenus dans cette interface.
L'évaluation du contenu du TLB n'expose pas les informations sur les interfaces privées que l'objet COM peut utiliser. –
Les interfaces COM privées n'apparaîtront pas, vous avez raison. –
- 1. Déterminer les interfaces implémentées par un type
- 2. Pourquoi le compilateur C# déclare-t-il explicitement toutes les interfaces implémentées par un type?
- 3. Rechercher les interfaces implémentées immédiatement sur un type
- 4. Affichage des interfaces implémentées par une classe dans Visual Studio
- 5. VB10, propriétés implémentées automatiquement et COM
- 6. Comment détecter les modifications dans un objet?
- 7. Dump l'interface exposée par un objet COM
- 8. Comment trouvez-vous les interfaces d'un COM sans typelib?
- 9. Dans un complément Visual Studio 2008, comment puis-je identifier les interfaces implémentées par une propriété de classe?
- 10. Dérivation interfaces COM dans .NET
- 11. Comment les références faibles sont-elles implémentées?
- 12. UDP-Diffusion sur toutes les interfaces
- 13. Obtenir toutes les adresses IPv6 sur toutes les interfaces (Windows)
- 14. Comment implémenter Dispose dans un objet COM
- 15. Décomptage des interfaces COM non documentées
- 16. .NET: Comment déterminer si un objet est un objet COM?
- 17. C# - libère toutes les ressources utilisées par un objet
- 18. Comment détecter un objet est cascade supprimé par coredata
- 19. Mocking COM Interfaces utilisant Rhino Mocks
- 20. Comment déboguer des applications en utilisant des interfaces COM?
- 21. Comment sérialiser un objet COM dans .Net?
- 22. Dans VB6, comment appeler un objet COM nécessitant un pointeur sur un objet?
- 23. Les classes d'implémentation peuvent-elles "hériter" des commentaires XML de leurs interfaces implémentées?
- 24. Renvoie toutes les propriétés d'un objet dans Objective-C
- 25. Comment supprimer un composant COM + d'une application COM + par programme
- 26. Comment puis-je empêcher quelqu'un d'appeler mes interfaces API COM?
- 27. Comment les coroutines sont-elles implémentées?
- 28. ATL/COM: Puis-je avoir la même fonction dans deux interfaces différentes du même objet?
- 29. Mocking d'un objet COM
- 30. Étant donné un objet, comment puis-je dire par programme quelles interfaces il prend en charge?
Si vous ne vous en souvenez pas, IDispatch/IDispatchEx vous permettra d'intercepter les interfaces avec l'attribut oleautomation dans l'IDL. –