Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Implementa o lado do cliente da automação OLE.
Sintaxe
class COleDispatchDriver
Membros
Construtores públicos
| Nome | Descrição |
|---|---|
| COleDispatchDriver::COleDispatchDriver | Constrói um objeto COleDispatchDriver. |
Métodos públicos
| Nome | Descrição |
|---|---|
| COleDispatchDriver::AttachDispatch | Anexa uma conexão IDispatch ao objeto COleDispatchDriver. |
| COleDispatchDriver::CreateDispatch | Cria uma conexão IDispatch e a anexa ao objeto COleDispatchDriver. |
| COleDispatchDriver::DetachDispatch | Desanexa uma conexão IDispatch, sem liberá-la. |
| COleDispatchDriver::GetProperty | Obtém uma propriedade de automação. |
| COleDispatchDriver::InvokeHelper | Auxiliar para chamar métodos de automação. |
| COleDispatchDriver::ReleaseDispatch | Libera uma conexão IDispatch. |
| COleDispatchDriver::SetProperty | Define uma propriedade de automação. |
Operadores públicos
| Nome | Descrição |
|---|---|
| COleDispatchDriver::operator = | Copia o valor de origem no objeto COleDispatchDriver. |
| COleDispatchDriver::operator LPDISPATCH | Acessa o ponteiro IDispatch subjacente. |
Membros de Dados Públicos
| Nome | Descrição |
|---|---|
| COleDispatchDriver::m_bAutoRelease | Especifica se é devido liberar o IDispatch durante ReleaseDispatch ou a destruição de objeto. |
| COleDispatchDriver::m_lpDispatch | Indica o ponteiro para a interface IDispatch anexada a esse COleDispatchDriver. |
Comentários
COleDispatchDriver não tem uma classe base.
As interfaces de expedição OLE fornecem acesso aos métodos e propriedades de um objeto. Funções membro de COleDispatchDriver anexam, desanexam, criam e liberam uma conexão de expedição do tipo IDispatch. Outras funções de membro usam listas de argumentos variáveis para simplificar a chamada IDispatch::Invoke.
Essa classe pode ser usada diretamente, mas geralmente é usada somente por classes criadas pelo assistente Adicionar Classe. Quando você cria novas classes C++ importando uma biblioteca de tipos, as novas classes são derivadas de COleDispatchDriver.
Para obter mais informações sobre o uso de COleDispatchDriver, consulte os seguintes artigos:
Hierarquia de herança
COleDispatchDriver
Requisitos
Cabeçalho afxdisp.h
COleDispatchDriver::AttachDispatch
Chame a função membro AttachDispatch para anexar um ponteiro IDispatch ao objeto COleDispatchDriver. Para obter mais informações, confira Como implementar a interface IDispatch.
void AttachDispatch(
LPDISPATCH lpDispatch,
BOOL bAutoRelease = TRUE);
Parâmetros
lpDispatch
Ponteiro para um objeto IDispatch OLE que será anexado ao objeto COleDispatchDriver.
bAutoRelease
Especifica se a expedição deve ser liberada quando esse objeto sair do escopo.
Comentários
Essa função libera um ponteiro IDispatch que já está anexado ao objeto COleDispatchDriver.
Exemplo
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 objeto COleDispatchDriver.
COleDispatchDriver();
COleDispatchDriver(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE);
COleDispatchDriver(const COleDispatchDriver& dispatchSrc);
Parâmetros
lpDispatch
Ponteiro para um objeto IDispatch OLE que será anexado ao objeto COleDispatchDriver.
bAutoRelease
Especifica se a expedição deve ser liberada quando esse objeto sair do escopo.
dispatchSrc
Referência a um objeto COleDispatchDriver existente.
Comentários
O formulário COleDispatchDriver( LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE ) conecta a interface IDispatch.
O formulário COleDispatchDriver( const COleDispatchDriver& dispatchSrc ) copia um objeto COleDispatchDriver existente e incrementa a contagem de referência.
O formulário COleDispatchDriver( ) cria um objeto COleDispatchDriver, mas não conecta a interface IDispatch. Antes de usar COleDispatchDriver( ) sem argumentos, você deve conectar um IDispatch a ele usando COleDispatchDriver::CreateDispatch ou COleDispatchDriver::AttachDispatch. Para obter mais informações, confira Como implementar a interface IDispatch.
Exemplo
Confira o exemplo de COleDispatchDriver::CreateDispatch.
COleDispatchDriver::CreateDispatch
Cria um objeto de interface IDispatch e o anexa ao objeto COleDispatchDriver.
BOOL CreateDispatch(
REFCLSID clsid,
COleException* pError = NULL);
BOOL CreateDispatch(
LPCTSTR lpszProgID,
COleException* pError = NULL);
Parâmetros
clsid
ID de classe do objeto IDispatch de conexão que será criado.
pError
Ponteiro para um objeto de exceção OLE, que reterá o código de status resultante da criação.
lpszProgID
Ponteiro para o identificador programático, como "Excel.Document.5", do objeto de automação para o qual o objeto de expedição deve ser criado.
Valor de retorno
Diferente de zero em caso de êxito. Caso contrário, 0.
Exemplo
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::DetachDispatch
Desanexa a conexão IDispatch atual desse objeto.
LPDISPATCH DetachDispatch();
Valor de retorno
Um ponteiro para o objeto IDispatch OLE anexado anteriormente.
Comentários
O IDispatch não foi liberado.
Para obter mais informações sobre o tipo LPDISPATCH, consulte Implementar a interface IDispatch no SDK do Windows.
Exemplo
LPDISPATCH CreateLPDispatch(LPCTSTR lpszProgId)
{
COleDispatchDriver disp;
disp.CreateDispatch(lpszProgId);
return disp.DetachDispatch();
}
COleDispatchDriver::GetProperty
Obtém a propriedade do objeto especificada por dwDispID.
void GetProperty(
DISPID dwDispID,
VARTYPE vtProp,
void* pvProp) const;
Parâmetros
dwDispID
Identifica a propriedade a ser recuperada.
vtProp
Especifica a propriedade que será recuperada. Para obter valores possíveis, consulte a seção Comentários para COleDispatchDriver::InvokeHelper.
pvProp
Endereço da variável que receberá o valor da propriedade. Ele deve corresponder ao tipo especificado por vtProp.
Exemplo
CString IMyComObject::GetString(DISPID dispid)
{
CString result;
GetProperty(dispid, VT_BSTR, (void*)& result);
return result;
}
COleDispatchDriver::InvokeHelper
Chama o método ou a propriedade do objeto especificado 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 a propriedade que será invocada.
wFlags
Sinalizadores que descrevem o contexto da chamada de IDispatch::Invoke. . Para obter uma lista de valores possíveis, consulte o parâmetro wFlags em IDispatch::Invoke no SDK do Windows.
vtRet
Especifica o tipo de valor retornado. Para valores possíveis, consulte a seção Comentários.
pvRet
Endereço da variável que receberá o valor da propriedade ou o valor retornado. Ele deve corresponder ao tipo especificado por vtRet.
pbParamInfo
Ponteiro para uma cadeia de cadeia de caracteres de bytes com terminada em valor nulo que especifica os tipos dos parâmetros que seguem pbParamInfo.
...
Lista variável de parâmetros, de tipos especificados em pbParamInfo.
Comentários
O parâmetro pbParamInfo especifica os tipos dos parâmetros passados para o método ou propriedade. A lista variável de argumentos é representada por ... na declaração de sintaxe.
Os valores possíveis para o argumento vtRet são obtidos da enumeração VARENUM. Os valores possíveis são:
| Símbolo | 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 | VARIANT |
| VT_UNKNOWN | LPUNKNOWN |
O argumento pbParamInfo é uma lista separada por espaços de constantes VTS_. Um ou mais desses valores, separados por espaços (não vírgulas), especifica a lista de parâmetros da função. Os valores possíveis são listados com a macro EVENT_CUSTOM.
Essa função converte os parâmetros em valores VARIANTARG e invoca o método IDispatch::Invoke. Se a chamada de Invoke falhar, essa função gerará uma exceção. Se o SCODE (código de status) retornado for IDispatch::Invoke DISP_E_EXCEPTION, essa função gerará um objeto COleException, caso contrário, ele gerará um COleDispatchException.
Para obter mais informações, consulte VARIANTARG, Implementar a interface do IDispatch, IDispatch::Invoke e a Estrutura de códigos de erro COM no SDK do Windows.
Exemplo
Confira o exemplo de COleDispatchDriver::CreateDispatch.
COleDispatchDriver::m_bAutoRelease
Se TRUE, o objeto COM acessado por m_lpDispatch será liberado automaticamente quando ReleaseDispatch for chamado ou quando esse objeto COleDispatchDriver for destruído.
BOOL m_bAutoRelease;
Comentários
Por padrão, m_bAutoRelease é definido como TRUE no construtor.
Para obter mais informações sobre como liberar objetos COM, consulte Implementar a contagem de referências e IUnknown::Release no SDK do Windows.
Exemplo
// 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 interface IDispatch anexada a esse COleDispatchDriver.
LPDISPATCH m_lpDispatch;
Comentários
O membro de dados m_lpDispatch é uma variável pública do tipo LPDISPATCH.
Para saber mais, confira IDispatch no SDK do Windows.
Exemplo
Confira o exemplo de COleDispatchDriver::AttachDispatch.
COleDispatchDriver::operator =
Copia o valor de origem no objeto COleDispatchDriver.
const COleDispatchDriver& operator=(const COleDispatchDriver& dispatchSrc);
Parâmetros
dispatchSrc
Um ponteiro para um objeto COleDispatchDriver existente.
COleDispatchDriver::operator LPDISPATCH
Acessa o ponteiro IDispatch subjacente ao objeto COleDispatchDriver.
operator LPDISPATCH();
Exemplo
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
Libera a conexão IDispatch. Para obter mais informações, confira Implementar a interface do IDispatch
void ReleaseDispatch();
Comentários
Se a versão automática tiver sido definida para essa conexão, essa função chamará IDispatch::Release antes de liberar a interface.
Exemplo
Confira 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 ser definida.
vtProp
Especifica o tipo da propriedade que será definida. Para obter valores possíveis, consulte a seção Comentários para COleDispatchDriver::InvokeHelper.
...
Um único parâmetro do tipo especificado por vtProp.
Exemplo
void IMyComObject::SetString(DISPID dispid, LPCTSTR propVal)
{
SetProperty(dispid, VT_BSTR, propVal);
}
Confira também
CALCDRIV de exemplo do MFC
ACDUAL de exemplo do MFC
Gráfico da hierarquia
Classe CCmdTarget