Я создаю объект Browser Helper, используя VS2008, C ++. Мой класс был получен из IDispEventImpl и многих других
class ATL_NO_VTABLE CHelloWorldBHO :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CHelloWorldBHO, &CLSID_HelloWorldBHO>,
public IObjectWithSiteImpl<CHelloWorldBHO>,
public IDispatchImpl<IHelloWorldBHO, &IID_IHelloWorldBHO, &LIBID_HelloWorldLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IDispEventImpl<1, CHelloWorldBHO, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 1>
{
.
.
.
BEGIN_SINK_MAP(CHelloWorldBHO)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumentComplete)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, BeforeNavigate2)//Handle BeforeNavigate2
END_SINK_MAP()
.
.
.
}
Как видно из кода выше, мои DWebBrowserEvents2 обрабатываются с использованием макросов ATL. Теперь я хочу обработать HTMLElementEvents2 (для обнаружения щелчков, полос прокрутки и т. Д.). Для этого я QueryInterface () объекта IHTMLDocument2 для IHTMLElement, QueryInterface (), который для IConnectionPointContainer, и вызова IConnectionPointContainer :: FindConnectionPoint (DIIDleEHT) (См. статью MSDN по обработке HTMLElementEvents2). Проблема в том, что когда я перезаписываю IDispatch :: Invoke в моем классе, описатели DWebBrowserEvents2 (созданные с помощью макросов ATL) завершаются ошибкой. Есть ли способ обработать HTMLElementEvents2 без перезаписи Invoke или реализовать invoke таким образом, чтобы он обрабатывал только HTMLElementEvents2?
Спасибо, любая помощь будет оценена.