COleDispatchDriver – třída
Implementuje klientskou stranu automatizace OLE.
Syntaxe
class COleDispatchDriver
Členové
Veřejné konstruktory
Název | Popis |
---|---|
COleDispatchDriver::COleDispatchDriver | COleDispatchDriver Vytvoří objekt. |
Veřejné metody
Název | Popis |
---|---|
COleDispatchDriver::AttachDispatch | IDispatch Připojí připojení k objektuCOleDispatchDriver . |
COleDispatchDriver::CreateDispatch | IDispatch Vytvoří připojení a připojí ho k objektuCOleDispatchDriver . |
COleDispatchDriver::D etachDispatch | IDispatch Odpojte připojení, aniž byste ho uvolnili. |
COleDispatchDriver::GetProperty | Získá vlastnost automatizace. |
COleDispatchDriver::InvokeHelper | Pomocná rutina pro volání metod automatizace |
COleDispatchDriver::ReleaseDispatch | IDispatch Uvolní připojení. |
COleDispatchDriver::SetProperty | Nastaví vlastnost automatizace. |
Veřejné operátory
Název | Popis |
---|---|
COleDispatchDriver::operator = | Zkopíruje zdrojová hodnota do objektu COleDispatchDriver . |
COleDispatchDriver::operator LPDISPATCH | Přistupuje k podkladovému IDispatch ukazateli. |
Veřejné datové členy
Název | Popis |
---|---|
COleDispatchDriver::m_bAutoRelease | Určuje, zda se má uvolnit během zničení ReleaseDispatch objektu IDispatch nebo objektu. |
COleDispatchDriver::m_lpDispatch | Označuje ukazatel na IDispatch rozhraní připojené k tomuto COleDispatchDriver . |
Poznámky
COleDispatchDriver
nemá základní třídu.
Rozhraní ole dispatch poskytují přístup k metodám a vlastnostem objektu. Členské funkce COleDispatchDriver
připojení, odpojení, vytvoření a uvolnění připojení k odeslání typu IDispatch
. Jiné členské funkce používají seznamy argumentů proměnných ke zjednodušení volání IDispatch::Invoke
.
Tuto třídu lze použít přímo, ale obvykle ji používají pouze třídy vytvořené průvodcem Přidat třídu. Při vytváření nových tříd jazyka C++ importováním knihovny typů jsou nové třídy odvozeny z COleDispatchDriver
.
Další informace o použití COleDispatchDriver
najdete v následujících článcích:
Hierarchie dědičnosti
COleDispatchDriver
Požadavky
Hlavička: afxdisp.h
COleDispatchDriver::AttachDispatch
Volání členské AttachDispatch
funkce pro připojení IDispatch
ukazatele k objektu COleDispatchDriver
. Další informace naleznete v tématu Implementace rozhraní IDispatch.
void AttachDispatch(
LPDISPATCH lpDispatch,
BOOL bAutoRelease = TRUE);
Parametry
lpDispatch
Ukazatel na objekt OLE IDispatch
, který má být připojen k objektu COleDispatchDriver
.
bAutoRelease
Určuje, zda má být odeslání vydáno, když tento objekt zmizí z rozsahu.
Poznámky
Tato funkce uvolní jakýkoli IDispatch
ukazatel, který je již připojen k objektu COleDispatchDriver
.
Příklad
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
COleDispatchDriver
Vytvoří objekt.
COleDispatchDriver();
COleDispatchDriver(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE);
COleDispatchDriver(const COleDispatchDriver& dispatchSrc);
Parametry
lpDispatch
Ukazatel na objekt OLE IDispatch
, který má být připojen k objektu COleDispatchDriver
.
bAutoRelease
Určuje, zda má být odeslání vydáno, když tento objekt zmizí z rozsahu.
dispatchSrc
Odkaz na existující COleDispatchDriver
objekt
Poznámky
COleDispatchDriver( LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE )
Formulář připojí rozhraní IDispatch.
Formulář COleDispatchDriver( const COleDispatchDriver& dispatchSrc )
zkopíruje existující COleDispatchDriver
objekt a zvýší počet odkazů.
Formulář COleDispatchDriver( )
vytvoří COleDispatchDriver
objekt, ale nepřipojí IDispatch
rozhraní. Před použitím COleDispatchDriver( )
bez argumentů byste se k němu měli připojit IDispatch
pomocí COleDispatchDriver::CreateDispatch nebo COleDispatchDriver::AttachDispatch. Další informace naleznete v tématu Implementace rozhraní IDispatch.
Příklad
Podívejte se na příklad pro COleDispatchDriver::CreateDispatch.
COleDispatchDriver::CreateDispatch
Vytvoří objekt rozhraní IDispatch a připojí ho k objektuCOleDispatchDriver
.
BOOL CreateDispatch(
REFCLSID clsid,
COleException* pError = NULL);
BOOL CreateDispatch(
LPCTSTR lpszProgID,
COleException* pError = NULL);
Parametry
clsid
ID třídy objektu IDispatch
připojení, který se má vytvořit.
Chyba pError
Ukazatel na objekt výjimky OLE, který bude obsahovat stavový kód vyplývající z vytvoření.
lpszProgID
Ukazatel na programový identifikátor, například "Excel.Document.5", objektu automatizace, pro který má být vytvořen objekt dispatch.
Návratová hodnota
Nenulové při úspěchu; jinak 0.
Příklad
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
Odpojte aktuální IDispatch
připojení od tohoto objektu.
LPDISPATCH DetachDispatch();
Návratová hodnota
Ukazatel na dříve připojený objekt OLE IDispatch
.
Poznámky
Ta není vydána IDispatch
.
Další informace o typu LPDISPATCH naleznete v tématu Implementace rozhraní IDispatch v sadě Windows SDK.
Příklad
LPDISPATCH CreateLPDispatch(LPCTSTR lpszProgId)
{
COleDispatchDriver disp;
disp.CreateDispatch(lpszProgId);
return disp.DetachDispatch();
}
COleDispatchDriver::GetProperty
Získá vlastnost objektu určená dwDispID.
void GetProperty(
DISPID dwDispID,
VARTYPE vtProp,
void* pvProp) const;
Parametry
dwDispID
Identifikuje vlastnost, která se má načíst.
vtProp
Určuje vlastnost, která se má načíst. Možné hodnoty naleznete v části Poznámky pro COleDispatchDriver::InvokeHelper.
pvProp
Adresa proměnné, která obdrží hodnotu vlastnosti. Musí odpovídat typu určenému nástrojem vtProp.
Příklad
CString IMyComObject::GetString(DISPID dispid)
{
CString result;
GetProperty(dispid, VT_BSTR, (void*)& result);
return result;
}
COleDispatchDriver::InvokeHelper
Volá metodu objektu nebo vlastnost určenou dwDispID v kontextu určeném wFlags.
void AFX_CDECL InvokeHelper(
DISPID dwDispID,
WORD wFlags,
VARTYPE vtRet,
void* pvRet,
const BYTE* pbParamInfo, ...);
Parametry
dwDispID
Identifikuje metodu nebo vlastnost, která se má vyvolat.
wFlags
Příznaky popisující kontext volání IDispatch::Invoke
. . Seznam možných hodnot naleznete v parametru wFlags v IDispatch::Invoke v sadě Windows SDK.
vtRet
Určuje typ návratové hodnoty. Možné hodnoty najdete v části Poznámky.
pvRet
Adresa proměnné, která obdrží hodnotu vlastnosti nebo návratovou hodnotu. Musí odpovídat typu určenému nástrojem vtRet.
pbParamInfo
Ukazatel na řetězec ukončený hodnotou null s bajty určující typy parametrů následující pbParamInfo.
...
Seznam proměnných parametrů, typů zadaných v pbParamInfo.
Poznámky
Parametr pbParamInfo určuje typy parametrů předaných metodě nebo vlastnosti. Seznam argumentů proměnných je reprezentován ... v deklaraci syntaxe.
Možné hodnoty argumentu vtRet jsou převzaty z výčtu VARENUM. Možné hodnoty jsou následující:
Symbol | Návratový typ |
---|---|
VT_EMPTY | void |
VT_I2 | short |
VT_I4 | long |
VT_R4 | float |
VT_R8 | double |
VT_CY | CY |
VT_DATE | DATE (Datum) |
VT_BSTR | BSTR |
VT_DISPATCH | LPDISPATCH |
VT_ERROR | SCODE |
VT_BOOL | BOOL |
VT_VARIANT | VARIANTA |
VT_UNKNOWN | LPUNKNOWN |
Argument pbParamInfo je seznam konstant oddělených mezerami VTS_ konstant. Jedna nebo více těchto hodnot oddělených mezerami (nikoli čárkami) určuje seznam parametrů funkce. Možné hodnoty jsou uvedeny pomocí makra EVENT_CUSTOM .
Tato funkce převede parametry na hodnoty VARIANTARG a pak vyvolá metodu IDispatch::Invoke . Pokud volání Invoke
selže, tato funkce vyvolá výjimku. Pokud je kód SCODE (stavový kód) vrácený IDispatch::Invoke
DISP_E_EXCEPTION, tato funkce vyvolá objekt COleException ; jinak vyvolá COleDispatchException.
Další informace naleznete v tématu VARIANTARG implementace rozhraní IDispatch, IDispatch::Invoke a struktura kódů chyb modelu COM v sadě Windows SDK.
Příklad
Podívejte se na příklad pro COleDispatchDriver::CreateDispatch.
COleDispatchDriver::m_bAutoRelease
Pokud je pravda, objekt COM, ke kterému přistupuje m_lpDispatch , se automaticky uvolní při zavolání ReleaseDispatch nebo při zničení tohoto COleDispatchDriver
objektu.
BOOL m_bAutoRelease;
Poznámky
Ve výchozím nastavení m_bAutoRelease
je v konstruktoru nastavena hodnota TRUE.
Další informace o uvolnění objektů MODELU COM naleznete v tématu Implementace počítání odkazů a IUnknown::Release v sadě Windows SDK.
Příklad
// 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
Ukazatel na IDispatch
rozhraní připojené k tomuto COleDispatchDriver
.
LPDISPATCH m_lpDispatch;
Poznámky
Datový m_lpDispatch
člen je veřejná proměnná typu LPDISPATCH.
Další informace naleznete v tématu IDispatch v sadě Windows SDK.
Příklad
Podívejte se na příklad pro COleDispatchDriver::AttachDispatch.
COleDispatchDriver::operator =
Zkopíruje zdrojová hodnota do objektu COleDispatchDriver
.
const COleDispatchDriver& operator=(const COleDispatchDriver& dispatchSrc);
Parametry
dispatchSrc
Ukazatel na existující COleDispatchDriver
objekt.
COleDispatchDriver::operator LPDISPATCH
Přistupuje k základnímu IDispatch
ukazateli objektu COleDispatchDriver
.
operator LPDISPATCH();
Příklad
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
IDispatch
Uvolní připojení. Další informace naleznete v tématu Implementace rozhraní IDispatch
void ReleaseDispatch();
Poznámky
Pokud je pro toto připojení nastaveno automatické vydání, tato funkce volá IDispatch::Release
před vydáním rozhraní.
Příklad
Podívejte se na příklad pro COleDispatchDriver::AttachDispatch.
COleDispatchDriver::SetProperty
Nastaví vlastnost objektu OLE určenou dwDispID.
void AFX_CDECL SetProperty(
DISPID dwDispID,
VARTYPE vtProp, ...);
Parametry
dwDispID
Identifikuje vlastnost, která se má nastavit.
vtProp
Určuje typ vlastnosti, která se má nastavit. Možné hodnoty naleznete v části Poznámky pro COleDispatchDriver::InvokeHelper.
...
Jeden parametr typu určeného nástrojem vtProp.
Příklad
void IMyComObject::SetString(DISPID dispid, LPCTSTR propVal)
{
SetProperty(dispid, VT_BSTR, propVal);
}
Viz také
MFC – ukázka CALCDRIV
MFC – ukázka ACDUAL
Graf hierarchie
CCmdTarget – třída