Megosztás a következőn keresztül:


COleDispatchDriver osztály

Megjegyzés:

A Microsoft Foundation Classes (MFC) könyvtár továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

Implementálja az OLE automation ügyféloldalát.

Szemantika

class COleDispatchDriver

Tagok

Nyilvános konstruktorok

Név Description
COleDispatchDriver::COleDispatchDriver Egy COleDispatchDriver objektumot hoz létre.

Nyilvános metódusok

Név Description
COleDispatchDriver::AttachDispatch IDispatch Kapcsolatot csatol az COleDispatchDriver objektumhoz.
COleDispatchDriver::CreateDispatch Létrehoz egy IDispatch kapcsolatot, és csatolja azt az COleDispatchDriver objektumhoz.
COleDispatchDriver::D etachDispatch Leválasztja a IDispatch kapcsolatot anélkül, hogy felengedné.
COleDispatchDriver::GetProperty Automatizálási tulajdonságot kap.
COleDispatchDriver::InvokeHelper Segítő az automatizálási módszerek meghívásához.
COleDispatchDriver::ReleaseDispatch Kapcsolatot ad IDispatch ki.
COleDispatchDriver::SetProperty Automatizálási tulajdonság beállítása.

Nyilvános operátorok

Név Description
COleDispatchDriver::operátor = Másolja a forrásértéket az COleDispatchDriver objektumba.
COleDispatchDriver::operátor LPDISPATCH Hozzáfér a mögöttes IDispatch mutatóhoz.

Nyilvános adatok tagjai

Név Description
COleDispatchDriver::m_bAutoRelease Megadja, hogy a rendszer felszabadítsa-e a közbeni ReleaseDispatch vagy objektummegsemmisítési IDispatch elemet.
COleDispatchDriver::m_lpDispatch Az ehhez COleDispatchDrivera csatolandó felülethez tartozó mutatót IDispatch jelzi.

Megjegyzések

COleDispatchDriver nem rendelkezik alaposztálysal.

Az OLE diszpécserfelületek hozzáférést biztosítanak egy objektum metódusaihoz és tulajdonságaihoz. Tagfüggvények csatolása COleDispatchDriver , leválasztása, létrehozása és feloldása típusú küldési IDispatchkapcsolat. Más tagfüggvények változó argumentumlistákkal egyszerűsítik a hívásokat IDispatch::Invoke.

Ez az osztály közvetlenül használható, de általában csak az Osztály hozzáadása varázsló által létrehozott osztályok használják. Amikor új C++ osztályokat hoz létre egy típustár importálásával, az új osztályok a következőből COleDispatchDriverszármaznak: .

A használattal COleDispatchDriverkapcsolatos további információkért tekintse meg a következő cikkeket:

Öröklési hierarchia

COleDispatchDriver

Requirements

Fejléc: afxdisp.h

COleDispatchDriver::AttachDispatch

Hívja meg a AttachDispatch tagfüggvényt, hogy egy mutatót IDispatch csatoljon az COleDispatchDriver objektumhoz. További információ: Az IDispatch felület implementálása.

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

Paraméterek

lpDispatch
Mutató az objektumhoz csatolandó OLE-objektumra IDispatchCOleDispatchDriver .

bAutoRelease
Meghatározza, hogy az objektum hatókörének túllépésekor a küldést fel kell-e szabadítani.

Megjegyzések

Ez a függvény felszabadítja IDispatch az objektumhoz már csatolt mutatót COleDispatchDriver .

Example

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

Egy COleDispatchDriver objektumot hoz létre.

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

Paraméterek

lpDispatch
Mutató az objektumhoz csatolandó OLE-objektumra IDispatchCOleDispatchDriver .

bAutoRelease
Meghatározza, hogy az objektum hatókörének túllépésekor a küldést fel kell-e szabadítani.

dispatchSrc
Hivatkozás egy meglévő COleDispatchDriver objektumra.

Megjegyzések

Az űrlap COleDispatchDriver( LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE ) csatlakoztatja az IDispatch felületet.

Az űrlap COleDispatchDriver( const COleDispatchDriver& dispatchSrc ) átmásolja a meglévő COleDispatchDriver objektumot, és növeli a hivatkozás számát.

Az űrlap COleDispatchDriver( ) létrehoz egy objektumot COleDispatchDriver , de nem csatlakoztatja a IDispatch felületet. Mielőtt argumentumok nélkül használnaCOleDispatchDriver( ), a COleDispatchDriver::CreateDispatch vagy a COleDispatchDriver::AttachDispatch használatával kell csatlakoznia IDispatch hozzá. További információ: Az IDispatch felület implementálása.

Example

Lásd a COleDispatchDriver::CreateDispatch példát.

COleDispatchDriver::CreateDispatch

Létrehoz egy IDispatch interfészobjektumot, és csatolja az COleDispatchDriver objektumhoz.

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

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

Paraméterek

clsid
A létrehozandó kapcsolatobjektum osztályazonosítója IDispatch .

pError
Mutasson egy OLE kivételobjektumra, amely a létrehozásból eredő állapotkódot tárolja.

lpszProgID
Mutasson annak az automatizálási objektumnak a programozott azonosítójára,például az "Excel.Document.5"-ra, amelyhez létre kívánja hozni a küldő objektumot.

Visszaadott érték

Nonzero a siker; egyéb esetben 0.

Example

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

Leválasztja az aktuális IDispatch kapcsolatot erről az objektumról.

LPDISPATCH DetachDispatch();

Visszaadott érték

A korábban csatolt OLE-objektumra IDispatch mutató mutató.

Megjegyzések

A IDispatch nincs felszabadítva.

Az LPDISPATCH típusával kapcsolatos további információkért lásd az IDispatch-felület implementálását a Windows SDK-ban.

Example

LPDISPATCH CreateLPDispatch(LPCTSTR lpszProgId)
{
   COleDispatchDriver disp;

   disp.CreateDispatch(lpszProgId);

   return disp.DetachDispatch();
}

COleDispatchDriver::GetProperty

Lekéri a dwDispID által megadott objektumtulajdonságot.

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

Paraméterek

dwDispID
Azonosítja a lekérendő tulajdonságot.

vtProp
A lekérendő tulajdonságot adja meg. A lehetséges értékekért tekintse meg a COleDispatchDriver::InvokeHelper megjegyzéseket ismertető szakaszát.

pvProp
Annak a változónak a címe, amely megkapja a tulajdonság értékét. Meg kell egyeznie a vtProp által megadott típussal.

Example

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

COleDispatchDriver::InvokeHelper

Meghívja a dwDispID által megadott objektummetódust vagy tulajdonságot a wFlags által megadott környezetben.

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

Paraméterek

dwDispID
Azonosítja a meghívandó metódust vagy tulajdonságot.

wFlags
A hívás IDispatch::Invokekörnyezetét leíró jelzők. . A lehetséges értékek listájáért tekintse meg a wFlags paramétert az IDispatch::Invoke in the Windows SDK-ban.

vtRet
A visszatérési érték típusát adja meg. A lehetséges értékekért tekintse meg a Megjegyzések szakaszt.

pvRet
Annak a változónak a címe, amely megkapja a tulajdonságértéket vagy a visszatérési értéket. Meg kell egyeznie a vtRet által megadott típussal.

pbParamInfo
Mutató egy null értékű bájtos sztringre, amely megadja a pbParamInfo utáni paraméterek típusait.

...
A pbParamInfo-ban megadott paraméterek változólistája.

Megjegyzések

A pbParamInfo paraméter megadja a metódusnak vagy tulajdonságnak átadott paraméterek típusait. Az argumentumok változólistáját ... jelöli a szintaxis deklarációjában.

A vtRet argumentum lehetséges értékei a VARENUM enumerálásból származnak. A lehetséges értékek a következők:

Szimbólum Visszatérési típus
VT_EMPTY void
VT_I2 short
VT_I4 long
VT_R4 float
VT_R8 double
VT_CY CY
VT_DATE DÁTUM
VT_BSTR BSTR
VT_DISPATCH LPDISPATCH
VT_ERROR SCODE
VT_BOOL BOOL
VT_VARIANT VÁLTOZAT
VT_UNKNOWN LPUNKNOWN

A pbParamInfo argumentum VTS_ állandók szóközzel elválasztott listája. Ezen értékek közül legalább egy szóközökkel (nem vesszőkkel) elválasztva határozza meg a függvény paraméterlistáját. A lehetséges értékek a EVENT_CUSTOM makróval vannak felsorolva.

Ez a függvény a paramétereket VARIANTARG értékekké alakítja, majd meghívja az IDispatch::Invoke metódust . Ha a hívás Invoke sikertelen, ez a függvény kivételt fog eredményezni. Ha a visszaadott IDispatch::Invoke SCODE (állapotkód) DISP_E_EXCEPTION, ez a függvény egy COleException objektumot küld, ellenkező esetben egy COleDispatchException objektumot ad vissza.

További információ: VARIANTARG, Implementing the IDispatch Interface, IDispatch::Invoke és Structure of COM Error Codes in the Windows SDK.

Example

Lásd a COleDispatchDriver::CreateDispatch példát.

COleDispatchDriver::m_bAutoRelease

Ha IGAZ, a m_lpDispatch által elért COM-objektum automatikusan ki lesz bocsátva a ReleaseDispatch meghívásakor vagy az COleDispatchDriver objektum megsemmisítésekor.

BOOL m_bAutoRelease;

Megjegyzések

Alapértelmezés szerint m_bAutoRelease igaz értékre van állítva a konstruktorban.

A COM-objektumok kiadásával kapcsolatos további információkért lásd: Implementing Reference Counting and IUnknown::Release in the Windows SDK.

Example

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

Az ehhez COleDispatchDrivercsatolt felület mutatójaIDispatch.

LPDISPATCH m_lpDispatch;

Megjegyzések

Az m_lpDispatch adattag egy LPDISPATCH típusú nyilvános változó.

További információ: IDispatch a Windows SDK-ban.

Example

Lásd a COleDispatchDriver::AttachDispatch példát.

COleDispatchDriver::operátor =

Másolja a forrásértéket az COleDispatchDriver objektumba.

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

Paraméterek

dispatchSrc
Egy meglévő COleDispatchDriver objektumra mutató mutató.

COleDispatchDriver::operátor LPDISPATCH

Hozzáfér az objektum alapjául szolgáló IDispatch mutatóhoz COleDispatchDriver .

operator LPDISPATCH();

Example

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

Felszabadítja a IDispatch kapcsolatot. További információ: Az IDispatch-felület implementálása

void ReleaseDispatch();

Megjegyzések

Ha ehhez a kapcsolathoz beállította az automatikus kiadást, ez a függvény a felület felszabadítása előtt hívja IDispatch::Release meg a hívást.

Example

Lásd a COleDispatchDriver::AttachDispatch példát.

COleDispatchDriver::SetProperty

Beállítja a dwDispID által megadott OLE objektumtulajdonságot.

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

Paraméterek

dwDispID
Azonosítja a beállítani kívánt tulajdonságot.

vtProp
Megadja a beállítani kívánt tulajdonság típusát. A lehetséges értékekért tekintse meg a COleDispatchDriver::InvokeHelper megjegyzéseket ismertető szakaszát.

...
A vtProp által megadott típus egyetlen paramétere.

Example

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

Lásd még

MFC-minta CALCDRIV
MFC-minta ACDUAL
hierarchiadiagram
CCmdTarget osztály