BHO HtmlEventObject crashes

BHO HtmlEventObject crashes

本文关键字:crashes HtmlEventObject BHO      更新时间:2023-10-16

我有一个用C++编写的浏览器帮助程序对象,但是在收到OnHelp HtmlEvent时遇到问题。

当我尝试访问属性时,浏览器崩溃了。

VARIANT_BOOL STDMETHODCALLTYPE OnHelp(IHTMLEventObj2 *pEvtObj)
{
    std::cout << "OnHelp Event" << std::endl;
    if(pEvtObj != NULL) {
        VARIANT var;
        pEvtObj->getAttribute(L"formID", 0, &var);
        std::cout << (char*)var.bstrVal << std::endl;
    } 
    else {
        std::cout << "PELEM = NULL" << std::endl;
    }
    return VARIANT_TRUE;
}

由于某种原因,它在getAttribute行上崩溃了?在 C# 中执行此操作时,它可以完美运行。我希望有人可以帮助我解决这个问题。

编辑:

真正的问题是我需要使用IHTMLEventObj然后查询IHTMLEventObj2的参数。

VARIANT_BOOL STDMETHODCALLTYPE OnHelp(IHTMLEventObj *pEvtObj)
{
    IHTMLEventObj2 *pEvtObj2;
    pEvtObj->QueryInterface(IID_IHTMLEventObj2, (void**)&pEvtObj2);
    if(pEvtObj2 != NULL) {
        VARIANT var;
        pEvtObj2->getAttribute(CComBSTR(L"url"), 0, &var);
        std::cout << _bstr_t(var.bstrVal) << std::endl;
    } 
    else {
        std::cout << "PELEM = NULL" << std::endl;
    }
    return VARIANT_TRUE;
}

getAttribute 的第一个参数是一个BSTR,但你传递一个wchar_t*/unsigned int *取决于 VC 编译设置。
BSTR 是一个系统字符串,预期由接收方法解除分配。

尝试

#define DOM_ANON_STRING(x)          (_bstr_t(x))
pEvtObj->getAttribute(DOM_ANON_STRING(L"formID"), 0, &var);