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.

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top