Question

Je veux obtenir un bon IDispatch pointeur puis jeté à CMyDispatch pointeur et avoir mon chemin avec elle plus tard.

i.e.. en javascript que je veux faire quelque chose comme ceci:

var x = external.obj.x;
var y = external.obj.y;
external.obj.x = y;

x et y sont des instances de CMyDispatch .

CMyDispatch est retourné à javascript de cette façon:

STDMETHODIMP CMyDispatch::Invoke(DISPID dispIdMember, REFIID, LCID, WORD wFlags,
                                 DISPPARAMS* pDispParams, VARIANT* pVarResult,
                                 EXCEPINFO*, UINT*) {
  if( pVarResult )
  {
    CMyDispatch* pDisp = new CMyDispatch();
    CComVariant val( pDisp );
    val.Detach( pVarResult );
  }
  return S_OK;
}

CMyDispatch.Invoke () DISPATCH_PROPERTYPUT drapeau Je veux obtenir CMyDispatch exemple qui détient y Valeur .

Lorsque vous utilisez le code suivant, pDispatch est à des ordures:

STDMETHODIMP CMyDispatch::Invoke(DISPID dispIdMember, REFIID, LCID, WORD wFlags,
                                 DISPPARAMS* pDispParams, VARIANT* pVarResult,
                                 EXCEPINFO*, UINT*) {
  ASSERT( pDispParams->cArgs == 1 );
  ASSERT( VT_DISPATCH == pDispParams->rgvarg[0].vt );
  IDispatch* pDisp = ( pDispParams->rgvarg[0].pdispVal ); // <-- garbage
  CMyDispatch* pDispatch = (CMyDispatch*) pDisp; // <-- garbage
  return S_OK;
}

Que dois-je faire pour obtenir une bonne CMyDispatch pointeur ? Merci.

Était-ce utile?

La solution

Vous devriez vraiment pas, d'une interface coulée en descente à une mise en œuvre concrète est la première étape sur la route de malheur.

Cela dit, ce que vous faites devrait fonctionner, à moins que le javascript et l'objet COM course dans différents appartements, et vous obtenez un proxy vous passé, au lieu de l'objet réel.

Pourquoi est-ce que vous devez downcaster?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top