Classe COleDispatchDriver

Implementa il lato client dell'automazione OLE.

Sintassi

class COleDispatchDriver

Membri

Costruttori pubblici

Nome Descrizione
COleDispatchDriver::COleDispatchDriver Costruisce un oggetto COleDispatchDriver.

Metodi pubblici

Nome Descrizione
COleDispatchDriver::AttachDispatch Collega una IDispatch connessione all'oggetto COleDispatchDriver .
COleDispatchDriver::CreateDispatch Crea una IDispatch connessione e la collega all'oggetto COleDispatchDriver .
COleDispatchDriver::D etachDispatch Scollega una IDispatch connessione, senza rilasciarla.
COleDispatchDriver::GetProperty Ottiene una proprietà di automazione.
COleDispatchDriver::InvokeHelper Helper per chiamare i metodi di automazione.
COleDispatchDriver::ReleaseDispatch Rilascia una IDispatch connessione.
COleDispatchDriver::SetProperty Imposta una proprietà di automazione.

Operatori pubblici

Nome Descrizione
COleDispatchDriver::operator = Copia il valore di origine nell'oggetto COleDispatchDriver .
COleDispatchDriver::operator LPDISPATCH Accede al puntatore sottostante IDispatch .

Membri dati pubblici

Nome Descrizione
COleDispatchDriver::m_bAutoRelease Specifica se rilasciare durante o la distruzione dell'oggetto IDispatch ReleaseDispatch .
COleDispatchDriver::m_lpDispatch Indica il puntatore all'interfaccia IDispatch collegata a questo COleDispatchDriveroggetto .

Osservazioni:

COleDispatchDriver non dispone di una classe di base.

Le interfacce dispatch OLE forniscono l'accesso ai metodi e alle proprietà di un oggetto. Funzioni membro di COleDispatchDriver collegamento, scollegamento, creazione e rilascio di una connessione dispatch di tipo IDispatch. Altre funzioni membro usano elenchi di argomenti variabili per semplificare la chiamata IDispatch::Invokea .

Questa classe può essere usata direttamente, ma in genere viene usata solo dalle classi create dalla procedura guidata Aggiungi classe. Quando si creano nuove classi C++ importando una libreria dei tipi, le nuove classi vengono derivate da COleDispatchDriver.

Per altre informazioni sull'uso COleDispatchDriverdi , vedere gli articoli seguenti:

Gerarchia di ereditarietà

COleDispatchDriver

Requisiti

Intestazione: afxdisp.h

COleDispatchDriver::AttachDispatch

Chiamare la funzione membro AttachDispatch per collegare un puntatore IDispatch all'oggetto COleDispatchDriver . Per altre informazioni, vedere Implementing the IDispatch Interface.

void AttachDispatch(
    LPDISPATCH lpDispatch,
    BOOL bAutoRelease = TRUE);

Parametri

lpDispatch
Puntatore a un oggetto OLE IDispatch da collegare all'oggetto COleDispatchDriver .

bAutoRelease
Specifica se rilasciare l'invio quando l'oggetto esce dall'ambito.

Osservazioni:

Questa funzione rilascia qualsiasi puntatore IDispatch già collegato all'oggetto COleDispatchDriver .

Esempio

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

Costruisce un oggetto COleDispatchDriver.

COleDispatchDriver();
COleDispatchDriver(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE);
COleDispatchDriver(const COleDispatchDriver& dispatchSrc);

Parametri

lpDispatch
Puntatore a un oggetto OLE IDispatch da collegare all'oggetto COleDispatchDriver .

bAutoRelease
Specifica se rilasciare l'invio quando l'oggetto esce dall'ambito.

dispatchSrc
Riferimento a un oggetto esistente COleDispatchDriver .

Osservazioni:

Il modulo COleDispatchDriver( LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE ) connette l'interfaccia IDispatch .

Il modulo COleDispatchDriver( const COleDispatchDriver& dispatchSrc ) copia un oggetto esistente COleDispatchDriver e incrementa il conteggio dei riferimenti.

Il modulo COleDispatchDriver( ) crea un COleDispatchDriver oggetto ma non connette l'interfaccia IDispatch . Prima di usare COleDispatchDriver( ) senza argomenti, è necessario connettersi a un oggetto IDispatch usando COleDispatchDriver::CreateDispatch o COleDispatchDriver::AttachDispatch. Per altre informazioni, vedere Implementing the IDispatch Interface.

Esempio

Vedere l'esempio relativo a COleDispatchDriver::CreateDispatch.

COleDispatchDriver::CreateDispatch

Crea un oggetto interfaccia IDispatch e lo collega all'oggetto COleDispatchDriver .

BOOL CreateDispatch(
    REFCLSID clsid,
    COleException* pError = NULL);

BOOL CreateDispatch(
    LPCTSTR lpszProgID,
    COleException* pError = NULL);

Parametri

clsid
ID di classe dell'oggetto connessione IDispatch da creare.

pError
Puntatore a un oggetto eccezione OLE, che conterrà il codice stato risultante dalla creazione.

lpszProgID
Puntatore all'identificatore a livello di codice, ad esempio "Excel.Document.5", dell'oggetto di automazione per il quale viene creato l'oggetto distribuzione.

Valore restituito

Diverso da zero in caso di esito positivo; in caso contrario, 0.

Esempio

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

Scollega la connessione corrente IDispatch da questo oggetto.

LPDISPATCH DetachDispatch();

Valore restituito

Puntatore all'oggetto OLE IDispatch collegato in precedenza.

Osservazioni:

L'oggetto IDispatch non viene rilasciato.

Per altre informazioni sul tipo LPDISPATCH, vedere Implementazione dell'interfaccia IDispatch in Windows SDK.

Esempio

LPDISPATCH CreateLPDispatch(LPCTSTR lpszProgId)
{
   COleDispatchDriver disp;

   disp.CreateDispatch(lpszProgId);

   return disp.DetachDispatch();
}

COleDispatchDriver::GetProperty

Ottiene la proprietà dell'oggetto specificata da dwDispID.

void GetProperty(
    DISPID dwDispID,
    VARTYPE vtProp,
    void* pvProp) const;

Parametri

dwDispID
Identifica la proprietà da recuperare.

vtProp
Specifica la proprietà da recuperare. Per i valori possibili, vedere la sezione Note per COleDispatchDriver::InvokeHelper.

pvProp
Indirizzo della variabile che riceverà il valore della proprietà. Deve corrispondere al tipo specificato da vtProp.

Esempio

CString IMyComObject::GetString(DISPID dispid)
{
   CString result;
   GetProperty(dispid, VT_BSTR, (void*)& result);
   return result;
}

COleDispatchDriver::InvokeHelper

Chiama il metodo o la proprietà dell'oggetto specificato da dwDispID, nel contesto specificato da wFlags.

void AFX_CDECL InvokeHelper(
    DISPID dwDispID,
    WORD wFlags,
    VARTYPE vtRet,
    void* pvRet,
    const BYTE* pbParamInfo, ...);

Parametri

dwDispID
Identifica il metodo o la proprietà da richiamare.

wFlags
Flag che descrivono il contesto della chiamata a IDispatch::Invoke. . Per un elenco dei valori possibili, vedere il parametro wFlags in IDispatch::Invoke in Windows SDK.

vtRet
Specifica il tipo del valore restituito. Per i valori possibili, vedere la sezione Osservazioni.

pvRet
Indirizzo della variabile che riceverà il valore della proprietà o il valore restituito. Deve corrispondere al tipo specificato da vtRet.

pbParamInfo
Puntatore a una stringa con terminazione Null di byte che specifica i tipi dei parametri seguenti pbParamInfo.

...
Elenco di variabili di parametri, di tipi specificati in pbParamInfo.

Osservazioni:

Il parametro pbParamInfo specifica i tipi dei parametri passati al metodo o alla proprietà . L'elenco di argomenti variabile è rappresentato da ... nella dichiarazione di sintassi.

I valori possibili per l'argomento vtRet vengono ricavati dall'enumerazione VARENUM. I possibili valori sono i seguenti:

Simbolo Tipo restituito
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 VARIANTE
VT_UNKNOWN LPUNKNOWN

L'argomento pbParamInfo è un elenco delimitato da spazi di costanti VTS_ . Uno o più di questi valori, separati da spazi (non virgole), specificano l'elenco dei parametri della funzione. I valori possibili sono elencati con la macro EVENT_CUSTOM .

Questa funzione converte i parametri in valori VARIANTARG, quindi richiama il metodo IDispatch::Invoke . Se la chiamata a Invoke ha esito negativo, questa funzione genera un'eccezione. Se sCODE (codice di stato) restituito da IDispatch::Invoke è DISP_E_EXCEPTION, questa funzione genera un oggetto COleException ; in caso contrario, genera un'eccezione COleDispatchException.

Per altre informazioni, vedere VARIANTARG, Implementazione dell'interfaccia IDispatch, IDispatch::Invoke e struttura dei codici di errore COM in Windows SDK.

Esempio

Vedere l'esempio relativo a COleDispatchDriver::CreateDispatch.

COleDispatchDriver::m_bAutoRelease

Se TRUE, l'oggetto COM a cui si accede da m_lpDispatch verrà rilasciato automaticamente quando viene chiamato ReleaseDispatch o quando l'oggetto COleDispatchDriver viene eliminato definitivamente.

BOOL m_bAutoRelease;

Osservazioni:

Per impostazione predefinita, m_bAutoRelease è impostato su TRUE nel costruttore.

Per altre informazioni sul rilascio di oggetti COM, vedere Implementazione del conteggio dei riferimenti e IUnknown::Release in Windows SDK.

Esempio

// 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

Puntatore all'interfaccia IDispatch collegata a questo COleDispatchDriveroggetto .

LPDISPATCH m_lpDispatch;

Osservazioni:

Il m_lpDispatch membro dati è una variabile pubblica di tipo LPDISPATCH.

Per altre informazioni, vedere IDispatch in Windows SDK.

Esempio

Vedere l'esempio per COleDispatchDriver::AttachDispatch.

COleDispatchDriver::operator =

Copia il valore di origine nell'oggetto COleDispatchDriver .

const COleDispatchDriver& operator=(const COleDispatchDriver& dispatchSrc);

Parametri

dispatchSrc
Puntatore a un oggetto esistente COleDispatchDriver .

COleDispatchDriver::operator LPDISPATCH

Accede al puntatore sottostante IDispatch dell'oggetto COleDispatchDriver .

operator LPDISPATCH();

Esempio

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

Rilascia la IDispatch connessione. Per altre informazioni, vedere Implementazione dell'interfaccia IDispatch

void ReleaseDispatch();

Osservazioni:

Se la versione automatica è stata impostata per questa connessione, questa funzione chiama IDispatch::Release prima di rilasciare l'interfaccia.

Esempio

Vedere l'esempio per COleDispatchDriver::AttachDispatch.

COleDispatchDriver::SetProperty

Imposta la proprietà dell'oggetto OLE specificata da dwDispID.

void AFX_CDECL SetProperty(
    DISPID dwDispID,
    VARTYPE vtProp, ...);

Parametri

dwDispID
Identifica la proprietà da impostare.

vtProp
Specifica il tipo della proprietà da impostare. Per i valori possibili, vedere la sezione Note per COleDispatchDriver::InvokeHelper.

...
Singolo parametro del tipo specificato da vtProp.

Esempio

void IMyComObject::SetString(DISPID dispid, LPCTSTR propVal)
{
   SetProperty(dispid, VT_BSTR, propVal);
}

Vedi anche

MFC Sample CALCDRIV
ACDUAL di esempio MFC
Grafico della gerarchia
Classe CCmdTarget