Вы не можете перечислить все доступные методы, если объект не реализует IDispatchEx.
Однако, если вы знаете имя метода, который хотите вызвать, вы можете использовать GetIDsOfNames, чтобы сопоставить имя с правильным 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: для полноты я подозреваю, что есть способ опроса интерфейса ITypeInfo2 (при условии, что есть библиотека типов для объекта), который вы получаете из IDispatch :: GetTypeInfo для списка методов, но я не сделал Это. Смотрите другой ответ.