Я использую этот код для приема событий в веб-браузере IWebBrowser2 на c ++:
STDMETHODIMP AdviseSink::Invoke(DISPID dispIdMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS* pDispParams,
VARIANT* pVarResult,
EXCEPINFO* pExcepInfo,
UINT* puArgErr)
{
if (!pDispParams)
return DISP_E_PARAMNOTOPTIONAL;
switch (dispIdMember)
{
case DISPID_DOCUMENTCOMPLETE:
{
DocumentComplete(pVarResult);
return S_OK;
}
case DISPID_NAVIGATECOMPLETE2:
return S_OK;
default:
return DISP_E_MEMBERNOTFOUND;
}
return S_OK;
}
void DocumentComplete(VARIANT *url)
{
std::string strValue = (char*)_bstr_t(url);
}
При вызове (void) DocumentComplete я получаю эту ошибку:
* Необработанное исключение в 0x7c812afb в webhost.exe: Microsoft C ++ исключение: _com_error в ячейке памяти 0x0012ed50. *
Если прокомментировать строку в DocumentComplete, она не показывает никаких ошибок. Также блоки try..catch не ловят исключение.
То, что я пытаюсь сделать, это использовать Variant * url, чтобы сравнить его с std :: string.
Как я могу это сделать?