после подобного вопроса я ответил некоторое время назад, я обнаружил, что при попытке перечислить объект использование IDispatch::Invoke(DISPID_NEWENUM,...)
завершается неудачно с DISP_E_EXCEPTION
в IE9.
Это происходит с IDispatch
и IDispatchEx
, на любом массиве JavaScript.
Само собой разумеется, что код отлично работает на IE6-IE8 и не работает только на IE9.
Тот же вопрос также появляется на форумах MSDN dev , не повезлодо сих пор.
Вот фрагмент кода, демонстрирующий то, что я пытался сделать.обратите внимание, что pDispatch
является вариантом массива javascript.
// invoke the object to retrieve the enumerator containing object
CComVariant varResult;
DISPPARAMS dispparamsNoArgs = {0};
EXCEPINFO excepInfo = {0};
UINT uiArgErr = (UINT)-1; // initialize to invalid arg
HRESULT hr = pDispatch->Invoke(DISPID_NEWENUM, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD | DISPATCH_PROPERTYGET, &dispparamsNoArgs, &varResult, &excepInfo, &uiArgErr);
// if failed - retry with IDispatchEX
if (FAILED(hr))
{
CComPtr<IDispatchEx> pDispatchEx;
pDispatchEx = pDispatch; // Implied query interface
hr = pDispatchEx->InvokeEx(DISPID_NEWENUM, LOCALE_USER_DEFAULT, DISPATCH_METHOD | DISPATCH_PROPERTYGET, &dispparamsNoArgs, &varResult, &excepInfo, NULL);
if (FAILED(hr))
return false;
}
Кто-нибудь знает, почему этот код всегда терпит неудачу (IDispatch и IDispatchEx) с HRESULT DISP_E_EXCEPTION специально для IE9?
Спасибо.