Kann ich die richtige Idispatch von dispparams bekommen?
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.
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?