Я пытаюсь добавить прослушиватель Window.PostMessage для JavaScript Window.postMessage внутри Atl BHO (c ++).
Код для добавления обработчика событий.
DISPID dispidAddEventListener = -1;
if (FAILED(dispWindow.GetIDOfName(CComBSTR("addEventListener"), &dispidAddEventListener)))
{
//failed..
return;
}
CListener* eventHandler;
if (FAILED(CListener::Create(this, &eventHandler)))
{
// Could not create the event sink
return;
}
IDispatch* eventHandlerAsDispatch;
if (FAILED(eventHandler->QueryInterface(IID_IDispatch, reinterpret_cast<void**>(&eventHandlerAsDispatch))))
{
//Could not get an IDispatch pointer for the event sink
return;
}
CComVariant result;
CComVariant invokeParams[3];
invokeParams[0] = CComVariant(false);
invokeParams[1] = CComVariant(eventHandlerAsDispatch);
invokeParams[2] = CComVariant(L"message");
if (FAILED(dispWindow.InvokeN(dispidAddEventListener, invokeParams, 3, &result)))
{
//Could not invoke the addEventListener method
return;
}
if (FAILED(result.lVal)) //failing here...
{
return;
}
Но после выполнения dispWindow.InvokeN Результат.lVal всегда равен -858993460, и addEventListener завершается ошибкой.
Любые идеи, что не так с приведенным выше кодом.
Задача ещё не решена.
Других решений пока нет …