Nie można wyliczyć wszystkich dostępnych metod, chyba że obiekt implementuje IDispatchEx.
Jednakże, jeśli znasz nazwę metody, którą chcesz wywołać, możesz użyć GetIDsOfNames do odwzorowania nazwy na właściwą DISPID.
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: Dla kompletności, podejrzewam, nie ma sposobu, aby przesłuchać interfejs ITypeInfo2 (zakładając, że jest biblioteką dla obiektu typu), które można uzyskać z IDispatch :: GetTypeInfo na listę metod, ale Nie zrobiłem tego. Zobacz drugą odpowiedź.
zobaczyć tego narzędzia (kod źródłowy): http://sourceforge.net/projects/axfuzz/files/ – lsalamon
a to: http://www.codeproject.com/KB/atl/ienum.aspx – lsalamon
Poszukałem innych przykładów, a także znalazłem http://spec.winprog.org/typeinf2/ –