Clase COleDispatchDriver
Implementa el cliente de automatización OLE.
Sintaxis
class COleDispatchDriver
Miembros
Constructores públicos
Nombre | Descripción |
---|---|
COleDispatchDriver::COleDispatchDriver | Construye un objeto COleDispatchDriver . |
Métodos públicos
Nombre | Descripción |
---|---|
COleDispatchDriver::AttachDispatch | Asocia una conexión IDispatch al objeto COleDispatchDriver . |
COleDispatchDriver::CreateDispatch | Crea una conexión IDispatch y la asocia al objeto COleDispatchDriver . |
COleDispatchDriver::DetachDispatch | Desasocia una conexión IDispatch , sin liberarla. |
COleDispatchDriver::GetProperty | Obtiene una propiedad de automatización. |
COleDispatchDriver::InvokeHelper | Asistente para llamar a métodos de automatización. |
COleDispatchDriver::ReleaseDispatch | Libera una conexión IDispatch . |
COleDispatchDriver::SetProperty | Establece una propiedad de automatización. |
Operadores públicos
Nombre | Descripción |
---|---|
COleDispatchDriver::operator = | Copia el valor de origen en el objeto COleDispatchDriver . |
COleDispatchDriver::operator LPDISPATCH | Accede al puntero subyacente IDispatch . |
Miembros de datos públicos
Nombre | Descripción |
---|---|
COleDispatchDriver::m_bAutoRelease | Especifica si se va a liberar IDispatch durante ReleaseDispatch o la destrucción del objeto. |
COleDispatchDriver::m_lpDispatch | Indica el puntero a la interfaz IDispatch asociada a este COleDispatchDriver . |
Comentarios
COleDispatchDriver
no tiene una clase base.
Las interfaces de envío OLE proporcionan acceso a los métodos y propiedades de un objeto. Las funciones miembro de COleDispatchDriver
asocian, desasocian, crean y liberan una conexión de envío del tipo IDispatch
. Otras funciones miembro usan listas de argumentos variables para simplificar la llamada a IDispatch::Invoke
.
Esta clase se puede usar directamente, pero generalmente solo la usan las clases creadas mediante el Asistente para agregar clases. Cuando crea nuevas clases de C++ importando una biblioteca de tipos, las nuevas clases se derivan de COleDispatchDriver
.
Para más información sobre el uso de COleDispatchDriver
, consulte los siguientes artículos:
Jerarquía de herencia
COleDispatchDriver
Requisitos
Encabezado: afxdisp.h
COleDispatchDriver::AttachDispatch
Llame a la función miembro AttachDispatch
para adjuntar un puntero IDispatch
al objeto COleDispatchDriver
. Para obtener más información, consulta Implementing the IDispatch Interface.
void AttachDispatch(
LPDISPATCH lpDispatch,
BOOL bAutoRelease = TRUE);
Parámetros
lpDispatch
Puntero a un objeto IDispatch
OLE que se adjuntará al objeto COleDispatchDriver
.
bAutoRelease
Especifica si el envío se liberará cuando este objeto se salga del ámbito.
Comentarios
Esta función libera cualquier puntero IDispatch
que ya está conectado al objeto COleDispatchDriver
.
Ejemplo
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
Construye un objeto COleDispatchDriver
.
COleDispatchDriver();
COleDispatchDriver(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE);
COleDispatchDriver(const COleDispatchDriver& dispatchSrc);
Parámetros
lpDispatch
Puntero a un objeto IDispatch
OLE que se adjuntará al objeto COleDispatchDriver
.
bAutoRelease
Especifica si el envío se liberará cuando este objeto se salga del ámbito.
dispatchSrc
Referencia a un objeto COleDispatchDriver
existente.
Comentarios
El formulario COleDispatchDriver( LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE )
conecta la interfaz IDispatch.
El formulario COleDispatchDriver( const COleDispatchDriver& dispatchSrc )
copia un objeto COleDispatchDriver
existente e incrementa el recuento de referencias.
El formulario COleDispatchDriver( )
crea un objeto COleDispatchDriver
pero no conecta la interfaz IDispatch
. Antes de usar COleDispatchDriver( )
sin argumentos, debe conectar IDispatch
a él mediante COleDispatchDriver::CreateDispatch o COleDispatchDriver::AttachDispatch. Para obtener más información, consulta Implementing the IDispatch Interface.
Ejemplo
Vea el ejemplo de COleDispatchDriver::CreateDispatch.
COleDispatchDriver::CreateDispatch
Crea un objeto de interfaz IDispatch y lo vincula al objeto COleDispatchDriver
.
BOOL CreateDispatch(
REFCLSID clsid,
COleException* pError = NULL);
BOOL CreateDispatch(
LPCTSTR lpszProgID,
COleException* pError = NULL);
Parámetros
clsid
Id. de clase del objeto de conexión IDispatch
que se va a crear.
pError
Puntero a un objeto de excepción OLE, que contendrá el código de estado resultante de la creación.
lpszProgID
Puntero al identificador de programación (por ejemplo, "Excel.Document.5") del objeto de automatización para el que es necesario crear el objeto de envío.
Valor devuelto
Distinto de cero en caso de éxito; en caso contrario, es 0.
Ejemplo
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
Desasocia la conexión IDispatch
actual de este objeto.
LPDISPATCH DetachDispatch();
Valor devuelto
Puntero al objeto IDispatch
OLE asociado anteriormente.
Comentarios
IDispatch
no se libera.
Para más información sobre el tipo LPDISPATCH, consulte Implementación de la interfaz IDispatch en Windows SDK.
Ejemplo
LPDISPATCH CreateLPDispatch(LPCTSTR lpszProgId)
{
COleDispatchDriver disp;
disp.CreateDispatch(lpszProgId);
return disp.DetachDispatch();
}
COleDispatchDriver::GetProperty
Obtiene la propiedad de objeto especificada por dwDispID.
void GetProperty(
DISPID dwDispID,
VARTYPE vtProp,
void* pvProp) const;
Parámetros
dwDispID
Identifica la propiedad que se va a recuperar.
vtProp
Especifica la propiedad que se va a recuperar. Para los valores posibles, vea la sección Comentarios para COleDispatchDriver::InvokeHelper.
pvProp
Dirección de la variable que recibirá el valor de la propiedad. Debe coincidir con el tipo especificado por vtProp.
Ejemplo
CString IMyComObject::GetString(DISPID dispid)
{
CString result;
GetProperty(dispid, VT_BSTR, (void*)& result);
return result;
}
COleDispatchDriver::InvokeHelper
Llama a la propiedad o al método de objeto especificados por dwDispID, en el contexto especificado por wFlags.
void AFX_CDECL InvokeHelper(
DISPID dwDispID,
WORD wFlags,
VARTYPE vtRet,
void* pvRet,
const BYTE* pbParamInfo, ...);
Parámetros
dwDispID
Identifica el método o la propiedad que se va a invocar.
wFlags
Las marcas que describen el contexto de la llamada a IDispatch::Invoke
. . Para una lista de valores posibles, consulte el parámetro wFlags en IDispatch::Invoke en Windows SDK.
vtRet
Especifica el tipo del valor devuelto. Para los valores posibles, vea la sección Comentarios.
pvRet
Dirección de la variable que recibirá el valor de la propiedad o el valor devuelto. Debe coincidir con el tipo especificado por vtRet.
pbParamInfo
Puntero a una cadena terminada en null de bytes que especifica los tipos de los parámetros que siguen a pbParamInfo.
...
Lista de variables de parámetros, de tipos especificados en pbParamInfo.
Comentarios
El parámetro pbParamInfo especifica los tipos de los parámetros pasados al método o a la propiedad. La lista variable de argumentos se representa mediante ... en la declaración de sintaxis.
Los valores posibles del argumento vtRet se toman de la enumeración VARENUM. Los valores posibles son los siguientes:
Símbolo | Tipo devuelto |
---|---|
VT_EMPTY | void |
VT_I2 | short |
VT_I4 | long |
VT_R4 | float |
VT_R8 | double |
VT_CY | CY |
VT_DATE | FECHA |
VT_BSTR | BSTR |
VT_DISPATCH | LPDISPATCH |
VT_ERROR | SCODE |
VT_BOOL | BOOL |
VT_VARIANT | VARIANT |
VT_UNKNOWN | LPUNKNOWN |
El argumento pbParamInfo es una lista separada por espacios de constantes VTS_. Uno o varios de estos valores, separados por espacios (no por comas), especifican la lista de parámetros de la función. Los valores posibles se muestran con la macro EVENT_CUSTOM .
Esta función convierte los parámetros en valores VARIANTARG y, a continuación, invoca el método IDispatch::Invoke . Si se produce un error en la llamada a Invoke
, esta función generará una excepción. Si SCODE (código de estado) devuelto por IDispatch::Invoke
es DISP_E_EXCEPTION, esta función generará un objeto COleException; de lo contrario, generará una COleDispatchException.
Para más información, consulte VARIANTARG, Implementación de la interfaz IDispatch, IDispatch:: Invoke y Estructura de códigos de error de COM en Windows SDK.
Ejemplo
Vea el ejemplo de COleDispatchDriver::CreateDispatch.
COleDispatchDriver::m_bAutoRelease
Si es TRUE, el objeto COM al que accede mediante m_lpDispatch se liberará automáticamente cuando se llame a ReleaseDispatch o cuando se destruya este objeto COleDispatchDriver
.
BOOL m_bAutoRelease;
Comentarios
De forma predeterminada, m_bAutoRelease
se establece en TRUE en el constructor.
Para más información sobre cómo liberar objetos COM, consulte Implementación del recuento de referencias e IUnknown::Release en Windows SDK.
Ejemplo
// 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
Indica el puntero a la interfaz IDispatch
asociada a este COleDispatchDriver
.
LPDISPATCH m_lpDispatch;
Comentarios
El miembro de datos m_lpDispatch
es una variable pública del tipo LPDISPATCH.
Para más información, consulte IDispatch en Windows SDK.
Ejemplo
Consulte el ejemplo de COleDispatchDriver::AttachDispatch.
COleDispatchDriver::operator =
Copia el valor de origen en el objeto COleDispatchDriver
.
const COleDispatchDriver& operator=(const COleDispatchDriver& dispatchSrc);
Parámetros
dispatchSrc
Un puntero a un objeto COleDispatchDriver
existente.
COleDispatchDriver::operator LPDISPATCH
Accede al puntero IDispatch
subyacente del objeto COleDispatchDriver
.
operator LPDISPATCH();
Ejemplo
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 la conexión IDispatch
. Para más información, consulte Implementación de la interfaz IDispatch.
void ReleaseDispatch();
Comentarios
Si se ha establecido la versión automática para esta conexión, esta función llama a IDispatch::Release
antes de liberar la interfaz.
Ejemplo
Consulte el ejemplo de COleDispatchDriver::AttachDispatch.
COleDispatchDriver::SetProperty
Establece la propiedad de objeto OLE especificada por dwDispID.
void AFX_CDECL SetProperty(
DISPID dwDispID,
VARTYPE vtProp, ...);
Parámetros
dwDispID
Identifica la propiedad que se va a establecer.
vtProp
Especifica el tipo de la propiedad que se va a establecer. Para los valores posibles, vea la sección Comentarios para COleDispatchDriver::InvokeHelper.
...
Un parámetro único del tipo especificado por vtProp.
Ejemplo
void IMyComObject::SetString(DISPID dispid, LPCTSTR propVal)
{
SetProperty(dispid, VT_BSTR, propVal);
}
Vea también
MFC Sample CALCDRIV
MFC Sample ACDUAL
Gráfico de jerarquías
CCmdTarget (clase)