Bạn không thể liệt kê tất cả các phương thức có sẵn trừ khi đối tượng triển khai IDispatchEx.
Tuy nhiên, nếu bạn biết tên của phương thức bạn muốn gọi, bạn có thể sử dụng GetIDsOfNames để ánh xạ tên tới đúng 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: Để hoàn chỉnh, tôi nghi ngờ có một cách để thẩm vấn các giao diện ITypeInfo2 (giả sử có một loại thư viện cho các đối tượng) mà bạn nhận được từ IDispatch :: GetTypeInfo cho một danh sách các phương pháp, nhưng tôi đã không thực hiện nó. Xem câu trả lời khác.
Nguồn
2010-01-21 19:52:12
thấy công cụ (mã nguồn) này: http://sourceforge.net/projects/axfuzz/files/ – lsalamon
và điều này: http://www.codeproject.com/KB/atl/ienum.aspx – lsalamon
Tôi đã đi tìm các ví dụ khác và cũng tìm thấy http://spec.winprog.org/typeinf2/ –