Classe COleDispatchDriver
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