Sdílet prostřednictvím


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í COleDispatchDrivernajdete 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