Frage

Ich möchte ein richtiges bekommen Idispatch Zeiger und dann auf CmyDispatch Zeiger und habe meinen Weg später damit.

dh in JavaScript möchte ich so etwas tun:

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

wo x und y sind Fälle von CmyDispatch.

CmyDispatch wird auf diese Weise an JavaScript zurückgegeben:

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

Im CmyDispatch.invoke () mit ISSATCH_PROPERTYPUT Flagge, die ich bekommen möchte CmyDispatch Instanz, die gilt y Wert.

Wenn Sie den folgenden Code verwenden, PDispatch ist auf einen Müll eingestellt:

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

Was soll ich tun, um richtig zu werden? CmyDispatch Zeiger? Vielen Dank.

War es hilfreich?

Lösung

Sie sollten es wirklich nicht, von einer Schnittstelle zu einer konkreten Implementierung zu downcasting ist der erste Schritt auf dem Weg zum Untergang.

Das heißt, was Sie tun, sollte funktionieren, es sei denn, das JavaScript und das COM -Objekt werden in verschiedenen Wohnungen ausgeführt, und Sie erhalten einen Stellvertreter an Sie, anstatt das wirkliche Objekt.

Warum musst du niedergeschlagen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top