適切なIDispatchポインターを取得してから、それをCMyDispatchポインターにキャストし、後でそれを処理したいと考えています。
つまり、JavaScriptで次のようなことをしたい:
var x = external.obj.x;
var y = external.obj.y;
external.obj.x = y;
xとyはCMyDispatchのインスタンスです。
CMyDispatchは次のように javascript に返されます。
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;
}
DISPATCH_PROPERTYPUTフラグを指定したCMyDispatch.Invoke() では、y値を保持するCMyDispatchインスタンスを取得したいと考えています。
次のコードを使用すると、pDispatchがガベージに設定されます。
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;
}
適切なCMyDispatchポインターを取得するにはどうすればよいですか? ありがとうございました。