しばらく前に答えた同様の質問に続いて、オブジェクトを列挙しようとすると、IE9での使用IDispatch::Invoke(DISPID_NEWENUM,...)
が失敗することがわかりました。
これは、任意のjavascript配列のおよびで発生します。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;
}
特にIE9でDISP_E_EXCEPTIONのHRESULTを使用して、このコードが常に失敗する理由(IDispatchおよびIDispatchEx)を誰かが知っていますか?
ありがとう。