Partager via


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