COleDispatchDriver-Klasse
Implementiert die Clientseite der OLE-Automatisierung.
Syntax
class COleDispatchDriver
Member
Öffentliche Konstruktoren
Name | Beschreibung |
---|---|
COleDispatchDriver::COleDispatchDriver | Erstellt ein COleDispatchDriver -Objekt. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
COleDispatchDriver::AttachDispatch | Fügt eine IDispatch Verbindung mit dem COleDispatchDriver Objekt an. |
COleDispatchDriver::CreateDispatch | Erstellt eine IDispatch Verbindung und fügt sie an das COleDispatchDriver Objekt an. |
COleDispatchDriver::D etachDispatch | Trennt eine IDispatch Verbindung, ohne sie freizugeben. |
COleDispatchDriver::GetProperty | Ruft eine Automatisierungseigenschaft ab. |
COleDispatchDriver::InvokeHelper | Hilfsprogramm zum Aufrufen von Automatisierungsmethoden. |
COleDispatchDriver::ReleaseDispatch | Gibt eine IDispatch Verbindung frei. |
COleDispatchDriver::SetProperty | Legt eine Automatisierungseigenschaft fest. |
Öffentliche Operatoren
Name | Beschreibung |
---|---|
COleDispatchDriver::operator = | Kopiert den Quellwert in das COleDispatchDriver Objekt. |
COleDispatchDriver::operator LPDISPATCH | Greift auf den zugrunde liegenden IDispatch Zeiger zu. |
Öffentliche Datenmember
Name | Beschreibung |
---|---|
COleDispatchDriver::m_bAutoRelease | Gibt an, ob die Vernichtung während IDispatch ReleaseDispatch oder des Objekts freigegeben werden soll. |
COleDispatchDriver::m_lpDispatch | Gibt den Zeiger auf die Schnittstelle an, die IDispatch an diese COleDispatchDriver Schnittstelle angefügt ist. |
Hinweise
COleDispatchDriver
besitzt keine Basisklasse.
OLE-Verteilerschnittstellen bieten Zugriff auf die Methoden und Eigenschaften eines Objekts. Memberfunktionen von COleDispatchDriver
Anfügen, Trennen, Erstellen und Freigeben einer Verteilerverbindung vom Typ IDispatch
. Andere Memberfunktionen verwenden Variablenargumentlisten, um das Aufrufen IDispatch::Invoke
zu vereinfachen.
Diese Klasse kann direkt verwendet werden, wird jedoch in der Regel nur von Klassen verwendet, die vom Assistenten zum Hinzufügen von Kursen erstellt wurden. Wenn Sie neue C++-Klassen durch Importieren einer Typbibliothek erstellen, werden die neuen Klassen von COleDispatchDriver
.
Weitere Informationen zur Verwendung COleDispatchDriver
finden Sie in den folgenden Artikeln:
Vererbungshierarchie
COleDispatchDriver
Anforderungen
Header: afxdisp.h
COleDispatchDriver::AttachDispatch
Rufen Sie die AttachDispatch
-Memberfunktion auf, um dem IDispatch
-Objekt einen COleDispatchDriver
-Zeiger anzufügen. Weitere Informationen finden Sie unter Implementing the IDispatch Interface.
void AttachDispatch(
LPDISPATCH lpDispatch,
BOOL bAutoRelease = TRUE);
Parameter
lpDispatch
Zeiger auf ein IDispatch
-OLE-Objekt, der an das COleDispatchDriver
-Objekt angefügt werden soll.
bAutoRelease
Gibt an, ob die Verteilung freigegeben werden soll, wenn dieses Objekt den Gültigkeitsbereich verlässt.
Hinweise
Diese Funktion gibt alle IDispatch
-Zeiger zurück, die dem COleDispatchDriver
-Objekt bereits angefügt wurden.
Beispiel
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
Erstellt ein COleDispatchDriver
-Objekt.
COleDispatchDriver();
COleDispatchDriver(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE);
COleDispatchDriver(const COleDispatchDriver& dispatchSrc);
Parameter
lpDispatch
Zeiger auf ein IDispatch
-OLE-Objekt, der an das COleDispatchDriver
-Objekt angefügt werden soll.
bAutoRelease
Gibt an, ob die Verteilung freigegeben werden soll, wenn dieses Objekt den Gültigkeitsbereich verlässt.
dispatchSrc
Verweisen auf ein vorhandenes COleDispatchDriver
Objekt.
Hinweise
Das Formular COleDispatchDriver( LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE )
verbindet die IDispatch-Schnittstelle .
Das Formular COleDispatchDriver( const COleDispatchDriver& dispatchSrc )
kopiert ein vorhandenes COleDispatchDriver
Objekt und erhöht die Referenzanzahl.
Das Formular COleDispatchDriver( )
erstellt ein COleDispatchDriver
Objekt, verbindet die IDispatch
Schnittstelle jedoch nicht. Bevor Sie ohne Argumente verwenden COleDispatchDriver( )
, sollten Sie eine IDispatch
Verbindung mit dieser herstellen, indem Sie entweder COleDispatchDriver::CreateDispatch oder COleDispatchDriver::AttachDispatch verwenden. Weitere Informationen finden Sie unter Implementing the IDispatch Interface.
Beispiel
Siehe dazu das Beispiel für COleDispatchDriver::CreateDispatch.
COleDispatchDriver::CreateDispatch
Erstellt ein IDispatch -Schnittstellenobjekt und fügt es zum COleDispatchDriver
-Objekt hinzu.
BOOL CreateDispatch(
REFCLSID clsid,
COleException* pError = NULL);
BOOL CreateDispatch(
LPCTSTR lpszProgID,
COleException* pError = NULL);
Parameter
clsid
Die Klassen-ID, des zu erstellenden IDispatch
-Verbindungsobjekts.
pError
Ein Zeiger auf ein OLE-Ausnahmeobjekt, das den Statuscode aufnimmt, der sich durch die Erstellung ergibt.
lpszProgID
Ein Zeiger auf den programmgesteuerten Bezeichner, z. B. „Excel.Document.5“, des Automatisierungsobjekts, für das das Dispatch-Objekt erstellt werden soll.
Rückgabewert
Bei Erfolg ein Wert ungleich 0 (null), andernfalls 0 (null).
Beispiel
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
Trennt die aktuelle IDispatch
Verbindung von diesem Objekt.
LPDISPATCH DetachDispatch();
Rückgabewert
Ein Zeiger auf das zuvor angefügte OLE-Objekt IDispatch
.
Hinweise
Dies IDispatch
wird nicht freigegeben.
Weitere Informationen zum LPDISPATCH-Typ finden Sie unter Implementieren der IDispatch-Schnittstelle im Windows SDK.
Beispiel
LPDISPATCH CreateLPDispatch(LPCTSTR lpszProgId)
{
COleDispatchDriver disp;
disp.CreateDispatch(lpszProgId);
return disp.DetachDispatch();
}
COleDispatchDriver::GetProperty
Ruft die durch dwDispID angegebene Objekteigenschaft ab.
void GetProperty(
DISPID dwDispID,
VARTYPE vtProp,
void* pvProp) const;
Parameter
dwDispID
Identifiziert die abzurufende Eigenschaft.
vtProp
Gibt die abzurufende Eigenschaft an. Informationen zu den möglichen Werten finden Sie im Abschnitt „Anmerkungen“ für COleDispatchDriver::InvokeHelper.
pvProp
Adresse der Variablen, die den Eigenschaftswert erhält. Er muss mit dem durch vtProp angegebenen Typ übereinstimmen.
Beispiel
CString IMyComObject::GetString(DISPID dispid)
{
CString result;
GetProperty(dispid, VT_BSTR, (void*)& result);
return result;
}
COleDispatchDriver::InvokeHelper
Ruft die durch dwDispID angegebene Objektmethode oder -eigenschaft im durch wFlags angegebenen Kontext auf.
void AFX_CDECL InvokeHelper(
DISPID dwDispID,
WORD wFlags,
VARTYPE vtRet,
void* pvRet,
const BYTE* pbParamInfo, ...);
Parameter
dwDispID
Bezeichnet die aufzurufende Methode oder Eigenschaft.
wFlags
Flags, die den Kontext des Aufrufs IDispatch::Invoke
beschreiben. . Eine Liste der möglichen Werte finden Sie im wFlags-Parameter in IDispatch::Invoke im Windows SDK.
vtRet
Gibt den Typ des Rückgabewerts an. Mögliche Werte finden Sie im Abschnitt „Hinweise“.
pvRet
Die Adresse der Variablen, die den Eigenschaftswert oder Rückgabewert aufnimmt. Er muss mit dem von vtRet angegebenen Typ übereinstimmen.
pbParamInfo
Zeigen Sie auf eine mit Null beendete Zeichenfolge mit Bytes, die die Typen der Parameter nach pbParamInfo angibt.
...
Variable Liste der Parameter, von Typen, die in pbParamInfo angegeben sind.
Hinweise
Der PbParamInfo-Parameter gibt die Typen der Parameter an, die an die Methode oder Eigenschaft übergeben werden. Die variable Argumentliste wird in der Syntaxdeklaration durch ... dargestellt.
Mögliche Werte für das vtRet-Argument stammen aus der VARENUM-Aufzählung. Verfügbare mögliche Werte:
Symbol | Rückgabetyp |
---|---|
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 |
Das PbParamInfo-Argument ist eine durch Leerzeichen getrennte Liste mit VTS_ Konstanten. Einer oder mehrere dieser Werte, durch Leerzeichen (nicht Kommas) getrennt, gibt bzw. geben die Parameterliste der Funktion an. Die möglichen Werte sind beim Makro EVENT_CUSTOM aufgelistet.
Diese Funktion konvertiert die Parameter in VARIANTARG-Werte und ruft dann die IDispatch::Invoke-Methode auf. Bei einem Fehler des Aufrufs von Invoke
löst diese Funktion eine Ausnahme aus. Wenn der von IDispatch::Invoke
zurückgegebene SCODE (Statuscode) DISP_E_EXCEPTION ist, löst diese Funktion ein COleException-Objekt aus. Andernfalls wird eine COleDispatchException ausgelöst.
Weitere Informationen finden Sie unter VARIANTARG, Implementieren der IDispatch-Schnittstelle, IDispatch::Invoke und Struktur von COM-Fehlercodes im Windows SDK.
Beispiel
Siehe dazu das Beispiel für COleDispatchDriver::CreateDispatch.
COleDispatchDriver::m_bAutoRelease
Wenn TRUE, wird das COM-Objekt, auf das von m_lpDispatch zugegriffen wird, automatisch freigegeben, wenn ReleaseDispatch aufgerufen wird oder wenn dieses COleDispatchDriver
Objekt zerstört wird.
BOOL m_bAutoRelease;
Hinweise
Standardmäßig m_bAutoRelease
ist im Konstruktor auf TRUE festgelegt.
Weitere Informationen zum Freigeben von COM-Objekten finden Sie unter Implementieren von Referenzzählungen und IUnknown::Release im Windows SDK.
Beispiel
// 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
Der Zeiger auf die IDispatch
an diese COleDispatchDriver
Schnittstelle angefügte Schnittstelle.
LPDISPATCH m_lpDispatch;
Hinweise
Das m_lpDispatch
Datenelement ist eine öffentliche Variable vom Typ LPDISPATCH.
Weitere Informationen finden Sie unter "IDispatch " im Windows SDK.
Beispiel
Sehen Sie sich das Beispiel für COleDispatchDriver::AttachDispatch an.
COleDispatchDriver::operator =
Kopiert den Quellwert in das COleDispatchDriver
Objekt.
const COleDispatchDriver& operator=(const COleDispatchDriver& dispatchSrc);
Parameter
dispatchSrc
Ein Zeiger auf ein vorhandenes COleDispatchDriver
Objekt.
COleDispatchDriver::operator LPDISPATCH
Greift auf den zugrunde liegenden IDispatch
Zeiger des COleDispatchDriver
Objekts zu.
operator LPDISPATCH();
Beispiel
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
Gibt die IDispatch
Verbindung frei. Weitere Informationen finden Sie unter Implementieren der IDispatch-Schnittstelle
void ReleaseDispatch();
Hinweise
Wenn die automatische Freigabe für diese Verbindung festgelegt wurde, ruft diese Funktion vor dem Freigeben der Schnittstelle auf IDispatch::Release
.
Beispiel
Sehen Sie sich das Beispiel für COleDispatchDriver::AttachDispatch an.
COleDispatchDriver::SetProperty
Legt die durch dwDispID angegebene OLE-Objekteigenschaft fest.
void AFX_CDECL SetProperty(
DISPID dwDispID,
VARTYPE vtProp, ...);
Parameter
dwDispID
Gibt die festzulegende Eigenschaft an.
vtProp
Gibt den Typ der festzulegenden Eigenschaft an. Informationen zu den möglichen Werten finden Sie im Abschnitt „Anmerkungen“ für COleDispatchDriver::InvokeHelper.
...
Ein einzelner Parameter des typs, der von vtProp angegeben wird.
Beispiel
void IMyComObject::SetString(DISPID dispid, LPCTSTR propVal)
{
SetProperty(dispid, VT_BSTR, propVal);
}
Siehe auch
MFC-Beispiel CALCDRIV
MFC-Beispiel ACDUAL
Hierarchiediagramm
CCmdTarget-Klasse