2009-11-18 3 views

Répondre

2

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.

+0

Si vous ne vous en souvenez pas, IDispatch/IDispatchEx vous permettra d'intercepter les interfaces avec l'attribut oleautomation dans l'IDL. –

2

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.

+2

L'évaluation du contenu du TLB n'expose pas les informations sur les interfaces privées que l'objet COM peut utiliser. –

+0

Les interfaces COM privées n'apparaîtront pas, vous avez raison. –

Questions connexes