0

I am trying to add Window.PostMessage listener for JavaScript Window.postMessage inside Atl BHO (c++).

Code for adding event handler..

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;
}

But after executing dispWindow.InvokeN The result.lVal is always -858993460, and addEventListener fails.

Any ideas what is wrong with above code.

User123456
  • 179
  • 1
  • 5
  • 14
  • You need to get the error code: `HRESULT hr = dispWindow.InvokeN(dispidAddEventListener, invokeParams, 3, &result); if (FAILED(hr)) { return; }` and see the value of `hr`. `-858993460` is just a value `0xCCCCCCCC` of uninitialized var. – Dmitry Sokolov Apr 06 '17 at 20:40
  • Hr is S_OK that is success but result_lVal is that number. I also discovered this only happens with Debug build. – User123456 Apr 08 '17 at 02:54

0 Answers0