2009-11-18 8 views

risposta

2

È possibile provare IDispatch/IDispatchEx se si desidera semplicemente sapere quali metodi sono richiamabili dal consumatore.

In COM, il metodo QueryInterface su IUnknown non è necessario per esporre quali interfacce potrebbero restituire. Ne chiedi uno basato sul suo IID e lo ottieni o meno. L'implementazione del QI in un particolare oggetto COM varia considerevolmente anche se si suppone che segua lo schema descritto da Microsoft qui - http://msdn.microsoft.com/en-us/library/ms682521%28VS.85%29.aspx.

+0

Se non si ricorda male, con IDispatch/IDispatchEx si cattureranno le interfacce con l'attributo oleautomation nell'IDL. –

2

Dipendente Walker non mostrerà le interfacce in quanto le sole esportazioni sono DllGetClassObject, DllRegisterServer, ecc. (Per COM host DLL).

È possibile, come dice weismat, ispezionare i file TLB. Molti oggetti COM contengono typelibs incorporati nella sezione delle risorse dell'eseguibile. Con uno strumento come resource hacker è possibile estrarre i TLB e utilizzare le funzioni COM LoadTypeLib per ottenere un puntatore all'interfaccia ITypeLib (è possibile utilizzare LoadTypeLib/LoadTypeLibEx direttamente con una DLL COM o EXE, ovviamente).

Con questa interfaccia è possibile scorrere sui tipi contenuti all'interno.

+2

Tuttavia, la valutazione dei contenuti del TLB non espone le informazioni su eventuali interfacce private che l'oggetto COM può utilizzare. –

+0

Le interfacce COM private non verranno visualizzate, hai ragione. –

Problemi correlati