BHO HtmlEventObject падает - PullRequest
       9

BHO HtmlEventObject падает

0 голосов
/ 16 мая 2011

У меня есть объект-помощник браузера, написанный на 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;
}

1 Ответ

1 голос
/ 16 мая 2011

Первый аргумент для 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);
...