suite à une similar question je lui ai répondu il y a quelque temps, je l'ai trouvé que lorsque vous essayez d'énumérer l'objet, en utilisant IDispatch::Invoke(DISPID_NEWENUM,...)
échoue avec DISP_E_EXCEPTION
sur IE9.
Cela se produit avec IDispatch
et IDispatchEx
, sur n'importe quel tableau javascript.javascript Récupérer objet tableau avec C++ en utilisant DISPID_NEWENUM échoue sur IE9
inutile de dire que le code fonctionne très bien sur IE6-IE8, et échoue uniquement sur IE9.
La même question apparaît également dans le MSDN dev forums sans aucune chance jusqu'à présent.
Voici un extrait de code pour illustrer ce que j'ai essayé de faire. Notez que pDispatch
est la variante de tableau de 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;
}
Est-ce que quelqu'un a une idée pourquoi ce code échoue toujours (IDispatch et IDispatchEx) avec HRESULT de DISP_E_EXCEPTION spécifiquement sur IE9?
Merci.
voulez-vous dire que vous avez un objet IDispatch (comme un tableau javascript IE objet) et lorsque vous essayez de récupérer son interface IEnumVARIANT - vous avez réussi? parce que si vous utilisez IE9 - il devrait échouer. jetez un oeil sur le code dans mon message - avez-vous essayé la même méthode? merci –
oui, QueryInterface sur IEnumVARIANT travaillé. Mon IE est 9.0.8112.16421 – edp
Mon IE probablement expiré. Ne sera pas surpris s'il échoue dans les mises à jour ultérieures IE. IEnumVARIANT :: Next ou QueryInterface pour IEnumVARIANT doivent être corrigés. Pour le code de version, j'essayerais probablement d'utiliser pDipstacheEx-> GetDispID de "0", "1", etc., puis InvokeEx. – edp