在我前段时间回答的一个类似问题之后,我发现在尝试枚举对象时,在 IE9 上使用IDispatch::Invoke(DISPID_NEWENUM,...)
失败。
这发生在任何 javascript 数组上的and上。DISP_E_EXCEPTION
IDispatch
IDispatchEx
不用说,代码在 IE6-IE8 上运行良好,仅在 IE9 上失败。
到目前为止,同样的问题也出现在MSDN 开发论坛中,但没有成功。
这是一个代码片段来演示我尝试做的事情。请注意,这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 上?
谢谢。