COleDispatchDriver, classe
Implémente le côté client d'OLE automation.
Syntaxe
class COleDispatchDriver
Membres
Constructeurs publics
Nom | Description |
---|---|
COleDispatchDriver ::COleDispatchDriver | Construit un objet COleDispatchDriver . |
Méthodes publiques
Nom | Description |
---|---|
COleDispatchDriver ::AttachDispatch | Attache une IDispatch connexion à l’objet COleDispatchDriver . |
COleDispatchDriver ::CreateDispatch | Crée une IDispatch connexion et l’attache à l’objet COleDispatchDriver . |
COleDispatchDriver ::D etachDispatch | Détache une IDispatch connexion, sans la libérer. |
COleDispatchDriver ::GetProperty | Obtient une propriété Automation. |
COleDispatchDriver ::InvokeHelper | Assistance pour appeler des méthodes d’automatisation. |
COleDispatchDriver ::ReleaseDispatch | Libère une IDispatch connexion. |
COleDispatchDriver ::SetProperty | Définit une propriété Automation. |
Opérateurs publics
Nom | Description |
---|---|
COleDispatchDriver ::operator = | Copie la valeur source dans l’objet COleDispatchDriver . |
COleDispatchDriver ::operator LPDISPATCH | Accède au pointeur sous-jacent IDispatch . |
Membres de données publics
Nom | Description |
---|---|
COleDispatchDriver ::m_bAutoRelease | Spécifie s’il faut libérer le pendant ReleaseDispatch ou la destruction d’objetIDispatch . |
COleDispatchDriver ::m_lpDispatch | Indique le pointeur vers l’interface IDispatch attachée à ce COleDispatchDriver . |
Notes
COleDispatchDriver
n’a pas de classe de base.
Les interfaces de répartition OLE fournissent l’accès aux méthodes et propriétés d’un objet. Fonctions membres de l’attachement COleDispatchDriver
, détacher, créer et libérer une connexion de distribution de type IDispatch
. D’autres fonctions membres utilisent des listes d’arguments de variable pour simplifier l’appel IDispatch::Invoke
.
Cette classe peut être utilisée directement, mais elle est généralement utilisée uniquement par les classes créées par l’Assistant Ajouter une classe. Lorsque vous créez des classes C++ en important une bibliothèque de types, les nouvelles classes sont dérivées de COleDispatchDriver
.
Pour plus d’informations sur l’utilisation COleDispatchDriver
, consultez les articles suivants :
Hiérarchie d'héritage
COleDispatchDriver
Spécifications
En-tête : afxdisp.h
COleDispatchDriver ::AttachDispatch
Appelez la fonction membre AttachDispatch
pour attacher un pointeur IDispatch
vers l’objet COleDispatchDriver
. Pour plus d'informations, consultez Implementing the IDispatch Interface.
void AttachDispatch(
LPDISPATCH lpDispatch,
BOOL bAutoRelease = TRUE);
Paramètres
lpDispatch
Pointeur vers un objet IDispatch
OLE à attacher à l’objet COleDispatchDriver
.
bAutoRelease
Spécifie si l’objet dispatch doit être libéré lorsque cet objet est hors de portée.
Notes
Cette fonction libère tout pointeur IDispatch
qui est déjà attaché à l’objet COleDispatchDriver
.
Exemple
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
Construit un objet COleDispatchDriver
.
COleDispatchDriver();
COleDispatchDriver(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE);
COleDispatchDriver(const COleDispatchDriver& dispatchSrc);
Paramètres
lpDispatch
Pointeur vers un objet IDispatch
OLE à attacher à l’objet COleDispatchDriver
.
bAutoRelease
Spécifie si l’objet dispatch doit être libéré lorsque cet objet est hors de portée.
dispatchSrc
Référence à un objet existant COleDispatchDriver
.
Notes
Le formulaire COleDispatchDriver( LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE )
connecte l’interface IDispatch .
Le formulaire COleDispatchDriver( const COleDispatchDriver& dispatchSrc )
copie un objet existant COleDispatchDriver
et incrémente le nombre de références.
Le formulaire COleDispatchDriver( )
crée un COleDispatchDriver
objet, mais ne connecte pas l’interface IDispatch
. Avant d’utiliser COleDispatchDriver( )
sans arguments, vous devez vous y connecter IDispatch
à l’aide de COleDispatchDriver ::CreateDispatch ou COleDispatchDriver ::AttachDispatch. Pour plus d'informations, consultez Implementing the IDispatch Interface.
Exemple
Consultez l’exemple de COleDispatchDriver::CreateDispatch.
COleDispatchDriver ::CreateDispatch
Crée un objet d’interface IDispatch et l’attache à l’objet COleDispatchDriver
.
BOOL CreateDispatch(
REFCLSID clsid,
COleException* pError = NULL);
BOOL CreateDispatch(
LPCTSTR lpszProgID,
COleException* pError = NULL);
Paramètres
clsid
ID de classe de l’objet de connexion IDispatch
à créer.
pError
Pointeur vers un objet d’exception OLE qui contiendra le code d’état résultant de la création.
lpszProgID
Pointeur vers l’identificateur de programmation, comme « Excel.Document.5 », de l’objet d’automation pour lequel l’objet de répartition doit être créé.
Valeur de retour
Différent de zéro en cas de réussite ; sinon, 0.
Exemple
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
Détache la connexion actuelle IDispatch
de cet objet.
LPDISPATCH DetachDispatch();
Valeur de retour
Pointeur vers l’objet OLE IDispatch
précédemment attaché.
Notes
Le IDispatch
n’est pas libéré.
Pour plus d’informations sur le type LPDISPATCH, consultez Implémentation de l’interface IDispatch dans le Kit de développement logiciel (SDK) Windows.
Exemple
LPDISPATCH CreateLPDispatch(LPCTSTR lpszProgId)
{
COleDispatchDriver disp;
disp.CreateDispatch(lpszProgId);
return disp.DetachDispatch();
}
COleDispatchDriver ::GetProperty
Obtient la propriété d’objet spécifiée par dwDispID.
void GetProperty(
DISPID dwDispID,
VARTYPE vtProp,
void* pvProp) const;
Paramètres
dwDispID
Identifie la propriété à récupérer.
vtProp
Spécifie la propriété à récupérer. Pour connaître les valeurs possibles, consultez la section Notes de COleDispatchDriver::InvokeHelper.
pvProp
Adresse de la variable qui recevra la valeur de propriété. Il doit correspondre au type spécifié par vtProp.
Exemple
CString IMyComObject::GetString(DISPID dispid)
{
CString result;
GetProperty(dispid, VT_BSTR, (void*)& result);
return result;
}
COleDispatchDriver::InvokeHelper
Appelle la méthode d’objet ou la propriété spécifiée par dwDispID, dans le contexte spécifié par wFlags.
void AFX_CDECL InvokeHelper(
DISPID dwDispID,
WORD wFlags,
VARTYPE vtRet,
void* pvRet,
const BYTE* pbParamInfo, ...);
Paramètres
dwDispID
Identifie la méthode ou propriété à appeler.
wFlags
Indicateurs décrivant le contexte de l’appel à IDispatch::Invoke
. . Pour obtenir la liste des valeurs possibles, consultez le paramètre wFlags dans IDispatch ::Invoke dans le Kit de développement logiciel (SDK) Windows.
vtRet
Spécifie le type de la valeur de retour. Pour connaître les valeurs possibles, consultez la section Notes.
pvRet
Adresse de la variable qui recevra la valeur de propriété ou la valeur de retour. Il doit correspondre au type spécifié par vtRet.
pbParamInfo
Pointeur vers une chaîne d’octets terminée par null spécifiant les types des paramètres suivants pbParamInfo.
...
Liste de variables de paramètres, des types spécifiés dans pbParamInfo.
Notes
Le paramètre pbParamInfo spécifie les types des paramètres passés à la méthode ou à la propriété. La liste variable d’arguments est représentée par ... dans la déclaration de syntaxe.
Les valeurs possibles de l’argument vtRet sont extraites de l’énumération VARENUM. Les valeurs possibles sont les suivantes :
Symbole | Type renvoyé |
---|---|
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 |
L’argument pbParamInfo est une liste séparée par des espaces de constantes VTS_ . Une ou plusieurs de ces valeurs, séparées par des espaces (et non par des virgules), spécifient la liste des paramètres de la fonction. Les valeurs possibles sont répertoriées avec la macro EVENT_CUSTOM .
Cette fonction convertit les paramètres en valeurs VARIANTARG, puis appelle la méthode IDispatch ::Invoke . Si l’appel à Invoke
échoue, cette fonction lève une exception. Si le SCODE (code d’état) retourné par IDispatch::Invoke
est DISP_E_EXCEPTION, cette fonction lève un objet COleException ; sinon, elle lève une exception COleDispatchException.
Pour plus d’informations, consultez VARIANTARG, Implémentation de l’interface IDispatch, IDispatch ::Invoke et structure des codes d’erreur COM dans le Kit de développement logiciel (SDK) Windows.
Exemple
Consultez l’exemple de COleDispatchDriver::CreateDispatch.
COleDispatchDriver ::m_bAutoRelease
Si la valeur est TRUE, l’objet COM accessible par m_lpDispatch est automatiquement libéré lorsque ReleaseDispatch est appelé ou lorsque cet COleDispatchDriver
objet est détruit.
BOOL m_bAutoRelease;
Notes
Par défaut, m_bAutoRelease
la valeur TRUE est définie sur TRUE dans le constructeur.
Pour plus d’informations sur la publication d’objets COM, consultez Implémentation du comptage de référence et IUnknown ::Release dans le Kit de développement logiciel (SDK) Windows.
Exemple
// 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
Pointeur vers l’interface IDispatch
attachée à ce COleDispatchDriver
.
LPDISPATCH m_lpDispatch;
Notes
Le m_lpDispatch
membre de données est une variable publique de type LPDISPATCH.
Pour plus d’informations, consultez IDispatch dans le Kit de développement logiciel (SDK) Windows.
Exemple
Consultez l’exemple de COleDispatchDriver ::AttachDispatch.
COleDispatchDriver ::operator =
Copie la valeur source dans l’objet COleDispatchDriver
.
const COleDispatchDriver& operator=(const COleDispatchDriver& dispatchSrc);
Paramètres
dispatchSrc
Pointeur vers un objet existant COleDispatchDriver
.
COleDispatchDriver ::operator LPDISPATCH
Accède au pointeur sous-jacent IDispatch
de l’objet COleDispatchDriver
.
operator LPDISPATCH();
Exemple
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
Libère la IDispatch
connexion. Pour plus d’informations, consultez Implémentation de l’interface IDispatch
void ReleaseDispatch();
Notes
Si la mise en production automatique a été définie pour cette connexion, cette fonction appelle IDispatch::Release
avant de libérer l’interface.
Exemple
Consultez l’exemple de COleDispatchDriver ::AttachDispatch.
COleDispatchDriver ::SetProperty
Définit la propriété d’objet OLE spécifiée par dwDispID.
void AFX_CDECL SetProperty(
DISPID dwDispID,
VARTYPE vtProp, ...);
Paramètres
dwDispID
Identifie la propriété à définir.
vtProp
Spécifie le type de la propriété à définir. Pour connaître les valeurs possibles, consultez la section Notes de COleDispatchDriver::InvokeHelper.
...
Paramètre unique du type spécifié par vtProp.
Exemple
void IMyComObject::SetString(DISPID dispid, LPCTSTR propVal)
{
SetProperty(dispid, VT_BSTR, propVal);
}
Voir aussi
Exemple CALCDRIV MFC
Exemple ACDUAL MFC
Graphique hiérarchique
CCmdTarget, classe