Partilhar via


Classe COleDispatchDriver

Observação

A biblioteca Microsoft Foundation Classes (MFC) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

Implementa o lado do cliente da automação OLE.

Sintaxe

class COleDispatchDriver

Membros

Construtores Públicos

Nome Description
COleDispatchDriver::COleDispatchDriver Constrói um COleDispatchDriver objeto.

Métodos Públicos

Nome Description
COLEDispatchDriver::AnexarDispatch Liga uma IDispatch ligação ao COleDispatchDriver objeto.
COleDispatchDriver::CreateDispatch Cria uma IDispatch ligação e liga-a ao COleDispatchDriver objeto.
COleDispatchDriver::D etachDispatch Desliga uma IDispatch ligação, sem a libertar.
COleDispatchDriver::GetProperty Recebe uma propriedade de automação.
COleDispatchDriver::InvokeHelper Auxiliar para chamadas de métodos de automação.
COleDispatchDriver::ReleaseDispatch Liberta uma IDispatch ligação.
COleDispatchDriver::SetProperty Define uma propriedade de automação.

Operadores Públicos

Nome Description
COleDispatchDriver::operator = Copia o valor fonte para o COleDispatchDriver objeto.
COleDispatchDriver::operador LPDISPATCH Acede ao ponteiro subjacente IDispatch .

Membros de Dados Públicos

Nome Description
ColeDispatchDriver::m_bAutoRelease Especifica se deve libertar o IDispatch objeto durante ReleaseDispatch ou destruição do objeto.
COleDispatchDriver::m_lpDispatch Indica o ponteiro para a IDispatch interface ligada a este COleDispatchDriver.

Observações

COleDispatchDriver não tem uma classe base.

As interfaces de despacho OLE fornecem acesso aos métodos e propriedades de um objeto. Funções membros de COleDispatchDriver anexar, destacar, criar e libertar uma ligação de despacho do tipo IDispatch. Outras funções membros usam listas de argumentos variáveis para simplificar a chamada IDispatch::Invokede .

Esta classe pode ser usada diretamente, mas geralmente é usada apenas por classes criadas pelo assistente de Adicionar Classe. Quando cria novas classes C++ importando uma biblioteca de tipos, as novas classes são derivadas de COleDispatchDriver.

Para mais informações sobre a utilização COleDispatchDriverde , consulte os seguintes artigos:

Hierarquia de herança

COleDispatchDriver

Requerimentos

Cabeçalho: afxdisp.h

COLEDispatchDriver::AnexarDispatch

Chame a AttachDispatch função membro para anexar um IDispatch ponteiro ao COleDispatchDriver objeto. Para mais informações, consulte Implementar a Interface IDispatch.

void AttachDispatch(
    LPDISPATCH lpDispatch,
    BOOL bAutoRelease = TRUE);

Parâmetros

lpDispatch
Apontador para um objeto OLE IDispatch a ser anexado ao COleDispatchDriver objeto.

bAutoRelease
Especifica se o despacho deve ser libertado quando este objeto sai do âmbito.

Observações

Esta função liberta qualquer IDispatch ponteiro que já esteja ligado ao COleDispatchDriver objeto.

Example

void COleContainerView::OnAttachDispatch()
{
   CLSID clsidWMP;
   LPDISPATCH pWMPDispatch = NULL;
   COleDispatchDriver oddWMP;

   try
   {
      AfxCheckError(::CLSIDFromProgID(_T("WMPlayer.OCX"), &clsidWMP));

      AfxCheckError(::CoCreateInstance(clsidWMP, NULL, CLSCTX_INPROC_SERVER,
         IID_IDispatch, (LPVOID*)& pWMPDispatch));

      oddWMP.AttachDispatch(pWMPDispatch, TRUE);
      pWMPDispatch = NULL; // our COleDispatchDriver now owns the interface

      CString strUIMode;
      oddWMP.GetProperty(23, VT_BSTR, (void*)& strUIMode);
      TRACE(_T("WMP uiMode is %s.\n"), strUIMode);
   }
   catch (COleException* pe)
   {
      pe->ReportError();
      pe->Delete();
   }
   catch (CMemoryException* pe)
   {
      pe->ReportError();
      pe->Delete();
   }

   // cleanup
   if (NULL != pWMPDispatch)
   {
      pWMPDispatch->Release();
   }

   // COleDispatchDriver automatically releases the dispatch interface when
   // it goes out of scope if m_bAutoRelease is TRUE.
}

COleDispatchDriver::COleDispatchDriver

Constrói um COleDispatchDriver objeto.

COleDispatchDriver();
COleDispatchDriver(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE);
COleDispatchDriver(const COleDispatchDriver& dispatchSrc);

Parâmetros

lpDispatch
Apontador para um objeto OLE IDispatch a ser anexado ao COleDispatchDriver objeto.

bAutoRelease
Especifica se o despacho deve ser libertado quando este objeto sai do âmbito.

dispatchSrc
Referência a um objeto existente COleDispatchDriver .

Observações

O formulário COleDispatchDriver( LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE ) liga a interface IDispatch .

O formulário COleDispatchDriver( const COleDispatchDriver& dispatchSrc ) copia um objeto existente COleDispatchDriver e incrementa a contagem de referências.

A forma COleDispatchDriver( ) cria um COleDispatchDriver objeto mas não liga a IDispatch interface. Antes de usar COleDispatchDriver( ) sem argumentos, deve ligar-se IDispatch a ela usando o COleDispatchDriver::CreateDispatch ou o COleDispatchDriver::AttachDispatch. Para mais informações, consulte Implementar a Interface IDispatch.

Example

Veja o exemplo de COleDispatchDriver::CreateDispatch.

COleDispatchDriver::CreateDispatch

Cria um objeto de interface IDispatch e anexa-o ao COleDispatchDriver objeto.

BOOL CreateDispatch(
    REFCLSID clsid,
    COleException* pError = NULL);

BOOL CreateDispatch(
    LPCTSTR lpszProgID,
    COleException* pError = NULL);

Parâmetros

CLSID
ID de classe do IDispatch objeto de ligação a criar.

pError
Apontar para um objeto de exceção OLE, que irá conter o código de estado resultante da criação.

lpszProgID
Apontador para o identificador programático, como "Excel.Document.5", do objeto de automação para o qual o objeto de despacho deve ser criado.

Valor de retorno

Não-zero em termos de sucesso; caso contrário, 0.

Example

void COleContainerView::OnCreateDispatch()
{
   COleDispatchDriver disp;
   COleException* pe = new COleException;

   try
   {
      // Create instance of Microsoft System Information Control 
      // by using ProgID.
      if (disp.CreateDispatch(_T("WMPlayer.OCX"), pe))
      {
         //Get uiMode.     
         CString strUIMode;
         disp.InvokeHelper(23, DISPATCH_PROPERTYGET, VT_BSTR,
            (void*)& strUIMode, NULL);

         CString strMsg;
         strMsg.Format(_T("WMP uiMode is %s."), strUIMode);
         AfxMessageBox(strMsg);
      }
      else
      {
         throw pe;
      }
   }
   //Catch control-specific exceptions.
   catch (COleDispatchException* pe)
   {
      CString cStr;

      if (!pe->m_strSource.IsEmpty())
         cStr = pe->m_strSource + _T(" - ");
      if (!pe->m_strDescription.IsEmpty())
         cStr += pe->m_strDescription;
      else
         cStr += _T("unknown error");

      AfxMessageBox(cStr, MB_OK,
         (pe->m_strHelpFile.IsEmpty()) ? 0 : pe->m_dwHelpContext);

      pe->Delete();
   }
   //Catch all MFC exceptions, including COleExceptions.
   // OS exceptions will not be caught.
   catch (CException* pe)
   {
      TRACE(_T("%s(%d): OLE Execption caught: SCODE = %x"),
         __FILE__, __LINE__, COleException::Process(pe));
      pe->Delete();
   }

   pe->Delete();
}

COleDispatchDriver::D etachDispatch

Desliga a ligação atual IDispatch deste objeto.

LPDISPATCH DetachDispatch();

Valor de retorno

Um apontador para o objeto OLE IDispatch previamente anexado.

Observações

O IDispatch não é divulgado.

Para mais informações sobre o tipo LPDISPATCH, consulte Implementar a Interface IDispatch no SDK do Windows.

Example

LPDISPATCH CreateLPDispatch(LPCTSTR lpszProgId)
{
   COleDispatchDriver disp;

   disp.CreateDispatch(lpszProgId);

   return disp.DetachDispatch();
}

COleDispatchDriver::GetProperty

Obtém a propriedade objeto especificada por dwDispID.

void GetProperty(
    DISPID dwDispID,
    VARTYPE vtProp,
    void* pvProp) const;

Parâmetros

dwDispID
Identifica a propriedade a recuperar.

vtProp
Especifica a propriedade a recuperar. Para possíveis valores, consulte a secção de Observações para COleDispatchDriver::InvokeHelper.

pvProp
Endereço da variável que irá receber o valor da propriedade. Deve corresponder ao tipo especificado pelo vtProp.

Example

CString IMyComObject::GetString(DISPID dispid)
{
   CString result;
   GetProperty(dispid, VT_BSTR, (void*)& result);
   return result;
}

COleDispatchDriver::InvokeHelper

Chama o método do objeto ou propriedade especificada por dwDispID, no contexto especificado por wFlags.

void AFX_CDECL InvokeHelper(
    DISPID dwDispID,
    WORD wFlags,
    VARTYPE vtRet,
    void* pvRet,
    const BYTE* pbParamInfo, ...);

Parâmetros

dwDispID
Identifica o método ou propriedade a ser invocada.

wFlags
Bandeiras que descrevem o contexto da chamada para IDispatch::Invoke. . Para uma lista de valores possíveis, consulte o parâmetro wFlags em IDispatch::Invoke no SDK do Windows.

vtRet
Especifica o tipo do valor de retorno. Para valores possíveis, consulte a secção de Observações.

pvRet
Endereço da variável que irá receber o valor da propriedade ou devolver o valor. Deve corresponder ao tipo especificado pelo vtRet.

pbParamInfo
Apontador para uma cadeia de bytes terminada por nulo que especifica os tipos dos parâmetros após pbParamInfo.

...
Lista variável de parâmetros, de tipos especificados em pbParamInfo.

Observações

O parâmetro pbParamInfo especifica os tipos de parâmetros passados ao método ou propriedade. A lista de variáveis de argumentos é representada por ... na declaração sintática.

Os valores possíveis para o argumento vtRet são retirados da enumeração VARENUM. Os valores possíveis são os seguintes:

Symbol Tipo de Retorno
VT_EMPTY void
VT_I2 short
VT_I4 long
VT_R4 float
VT_R8 double
VT_CY CY
VT_DATE DATE
VT_BSTR BSTR
VT_DISPATCH LPDISPATCH
VT_ERROR SCODE
VT_BOOL BOOL
VT_VARIANT VARIANTE
VT_UNKNOWN LPUNKNOWN

O argumento pbParamInfo é uma lista separada em espaço de constantes VTS_ . Um ou mais destes valores, separados por espaços (não vírgulas), especifica a lista de parâmetros da função. Os valores possíveis estão listados com a macro EVENT_CUSTOM .

Esta função converte os parâmetros para valores VARIANTARG e depois invoca o método IDispatch::Invoke . Se a chamada falhar Invoke , esta função lançará uma exceção. Se o SCODE (código de estado) devolvido por IDispatch::Invoke for DISP_E_EXCEPTION, esta função gera um objeto COleException ; caso contrário, gera um COleDispatchException.

Para mais informações, consulte VARIANTARG,Implementação da Interface IDispatch, IDispatch::Invoke e Estrutura dos Códigos de Erro COM no SDK do Windows.

Example

Veja o exemplo de COleDispatchDriver::CreateDispatch.

ColeDispatchDriver::m_bAutoRelease

Se for TRUE, o objeto COM acedido por m_lpDispatch será automaticamente libertado quando o ReleaseDispatch for chamado ou quando este COleDispatchDriver objeto for destruído.

BOOL m_bAutoRelease;

Observações

Por defeito, m_bAutoRelease está definido como TRUE no construtor.

Para mais informações sobre a libertação de objetos COM, consulte Implementing Reference Counting e IUnknown::Release no Windows SDK.

Example

// Clean up by forcing Release to be called
// on COleDispatchDriver object and delete
if (bError)
{
   pDisp->m_bAutoRelease = TRUE;
   delete pDisp;
   pDisp = NULL;
}

COleDispatchDriver::m_lpDispatch

O ponteiro para a IDispatch interface ligado a este COleDispatchDriver.

LPDISPATCH m_lpDispatch;

Observações

O m_lpDispatch membro de dados é uma variável pública do tipo LPDISPATCH.

Para mais informações, consulte IDispatch no SDK do Windows.

Example

Veja o exemplo de COleDispatchDriver::AttachDispatch.

COleDispatchDriver::operator =

Copia o valor fonte para o COleDispatchDriver objeto.

const COleDispatchDriver& operator=(const COleDispatchDriver& dispatchSrc);

Parâmetros

dispatchSrc
Um apontador para um objeto existente COleDispatchDriver .

COleDispatchDriver::operador LPDISPATCH

Acede ao ponteiro subjacente IDispatch do COleDispatchDriver objeto.

operator LPDISPATCH();

Example

COleDispatchDriver disp;
if (disp.CreateDispatch(_T("WMPlayer.OCX")))
{
   IDispatch* pDispatch = disp; //COleDispatchDriver::operator
                                //LPDISPATCH is called here
   IUnknown* pUnkn = NULL;
   HRESULT hr = pDispatch->QueryInterface(IID_IUnknown, (void**)& pUnkn);
   if (SUCCEEDED(hr))
   {
      //Do something...
      pUnkn->Release();
   }
}

COleDispatchDriver::ReleaseDispatch

Liberta a IDispatch ligação. Para mais informações, consulte Implementar a Interface IDispatch

void ReleaseDispatch();

Observações

Se a libertação automática estiver definida para esta ligação, esta função chama IDispatch::Release antes de libertar a interface.

Example

Veja o exemplo de COleDispatchDriver::AttachDispatch.

COleDispatchDriver::SetProperty

Define a propriedade do objeto OLE especificada por dwDispID.

void AFX_CDECL SetProperty(
    DISPID dwDispID,
    VARTYPE vtProp, ...);

Parâmetros

dwDispID
Identifica a propriedade a definir.

vtProp
Especifica o tipo de propriedade a definir. Para possíveis valores, consulte a secção de Observações para COleDispatchDriver::InvokeHelper.

...
Um único parâmetro do tipo especificado pelo vtProp.

Example

void IMyComObject::SetString(DISPID dispid, LPCTSTR propVal)
{
   SetProperty(dispid, VT_BSTR, propVal);
}

Consulte também

Exemplo MFC CALCDRIV
ACDUAL de Exemplo MFC
Gráfico de Hierarquia
Classe CCmdTarget