Могу ли я получить правильный Idispatch от Distparams?
Вопрос
Я хочу получить должное Idispatch Указатель затем бросьте на это Cmydispatch Указатель и пройдите с этим позже.
т.е. в JavaScript я хочу сделать что -то вроде этого:
var x = external.obj.x;
var y = external.obj.y;
external.obj.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;
}
В Cmydispatch.invoke () с Dispatch_propertyput флаг, который я хочу получить 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 указатель? Спасибо.
Решение
Вы действительно не должны, понижать от интерфейса до конкретной реализации, является первым шагом на дороге к Doom.
Тем не менее, то, что вы делаете, должно работать, если JavaScript и объект COM не работают в разных квартирах, и вы получаете доверенность, а не в реальном объекте.
Зачем вам нужно понижать?