Pregunta

quiero conseguir un adecuado Despacho de ID puntero y luego lanzarlo a CMyDispatch puntero y hacer lo que quiera más tarde.

es decir.en javascript quiero hacer algo como esto:

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

dónde X y y son ejemplos de CMyDispatch.

CMyDispatch se devuelve a javascript de esta manera:

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;
}

En CMyDispatch.Invocar() con DISPATCH_PROPERTYPUT bandera que quiero conseguir CMyDispatch instancia que sostiene y valor.

Al usar el siguiente código, pEnvío está configurado como algo de basura:

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;
}

¿Qué debo hacer para obtener la adecuada CMyDispatch ¿puntero?Gracias.

¿Fue útil?

Solución

Realmente no deberías hacerlo, pasar de una interfaz a una implementación concreta es el primer paso en el camino hacia la perdición.

Dicho esto, lo que está haciendo debería funcionar, a menos que javascript y el objeto COM se ejecuten en diferentes apartamentos y se le pase un proxy, en lugar del objeto real.

¿Por qué necesitas abatirte?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top