I have a browser helper object written in C++ but I have a problem when recieving a OnHelp HtmlEvent.
When I try to access a attribute the browser crashes.
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;
}
It crashes on the getAttribute line for some reason? When doing this in C# it works perfectly. I hope somebody can help me fix this.
Edit:
The real problem was with the parameter I needed to use IHTMLEventObj and then query for 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;
}
The first arg for getAttribute is a
BSTR, but your passing awchar_t*/unsigned int *depending on VC compile settings.BSTRis a system string which is expected to be deallocated by the receiving method.Try