Posso obter idispatch adequado de despparams?
Pergunta
Eu quero obter um adequado Idispatch ponteiro então lançou -o para Cmydispatch ponteiro e tenha meu caminho mais tarde.
ou seja, em JavaScript, quero fazer algo assim:
var x = external.obj.x;
var y = external.obj.y;
external.obj.x = y;
Onde x e y são instâncias de Cmydispatch.
Cmydispatch é devolvido ao JavaScript desta maneira:
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;
}
Dentro Cmydispatch.invoke () com Dispatch_Propertyput bandeira eu quero conseguir Cmydispatch instância que se mantém y valor.
Ao usar o seguinte código, pdispatch está definido para algum lixo:
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;
}
O que devo fazer para obter adequado Cmydispatch ponteiro? Obrigada.
Solução
Você realmente não deveria, de uma interface para uma implementação concreta é o primeiro passo na estrada a condenar.
Dito isto, o que você está fazendo deve funcionar, a menos que o JavaScript e o objeto COM sejam executados em apartamentos diferentes, e você recebe um proxy que você passa a você, em vez do objeto real.
Por que você precisa abaixar?