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 COleDispatchDriver oggetto . |
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::Invoke
a .
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 COleDispatchDriver
di , 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 COleDispatchDriver
oggetto .
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