我正在尝试在Atl BHO(c ++)中为JavaScript Window.postMessage添加Window.PostMessage侦听器。
添加事件处理程序的代码..
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 后,result.lVal始终为-858993460,而addEventListener失败。
上述代码有什么问题。