Non è possibile enumerare tutti i metodi disponibili a meno che l'oggetto non implementi IDispatchEx.
Tuttavia, se si conosce il nome del metodo che si desidera chiamare, è possibile utilizzare GetIDsOfNames per associare il nome al DISPID corretto.
HRESULT hr;
CComPtr<IDispatch> dispatch;
DISPID dispid;
WCHAR *member = "YOUR-FUNCTION-NAME-HERE";
DISPPARAMS* dispparams;
// Get your pointer to the IDispatch interface on the object here. Also setup your params in dispparams.
hr = dispatch->GetIDsOfNames(IID_NULL, &member, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
if (SUCCEEDED(hr)) {
hr = dispatch->Invoke(1, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, dispparams, &varResult, NULL, NULL);
}
Edit: Per completezza, ho il sospetto c'è un modo per interrogare l'interfaccia ITypeInfo2 (presumere che vi sia una libreria di tipi per l'oggetto) che si ottiene da IDispatch :: GetTypeInfo per un elenco di metodi, ma io non l'ho fatto Vedi l'altra risposta.
fonte
2010-01-21 19:52:12
vedere questo strumento (codice sorgente): http://sourceforge.net/projects/axfuzz/files/ – lsalamon
e questo: http://www.codeproject.com/KB/atl/ienum.aspx – lsalamon
Sono andato alla ricerca di altri esempi e ho anche trovato http://spec.winprog.org/typeinf2/ –