我有一个用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;
}发布于 2011-05-17 03:10:02
getAttribute的第一个arg是一个BSTR,但您传递的是一个wchar_t*/unsigned int *,这取决于VC编译设置。
BSTR是一个系统字符串,预计接收方法会释放该字符串。
试一试
#define DOM_ANON_STRING(x) (_bstr_t(x))
pEvtObj->getAttribute(DOM_ANON_STRING(L"formID"), 0, &var);https://stackoverflow.com/questions/6021188
复制相似问题