Klasa COleDispatchDriver

Implementuje stronę klienta automatyzacji OLE.

Składnia

class COleDispatchDriver

Członkowie

Konstruktory publiczne

Nazwa/nazwisko opis
COleDispatchDriver::COleDispatchDriver COleDispatchDriver Tworzy obiekt.

Metody publiczne

Nazwa/nazwisko opis
COleDispatchDriver::AttachDispatch IDispatch Dołącza połączenie z obiektemCOleDispatchDriver.
COleDispatchDriver::CreateDispatch IDispatch Tworzy połączenie i dołącza je do COleDispatchDriver obiektu.
COleDispatchDriver::D etachDispatch Odłącza IDispatch połączenie bez zwalniania go.
COleDispatchDriver::GetProperty Pobiera właściwość automatyzacji.
COleDispatchDriver::InvokeHelper Pomocnik do wywoływania metod automatyzacji.
COleDispatchDriver::ReleaseDispatch IDispatch Zwalnia połączenie.
COleDispatchDriver::SetProperty Ustawia właściwość automatyzacji.

Operatory publiczne

Nazwa/nazwisko opis
COleDispatchDriver::operator = Kopiuje wartość źródłową COleDispatchDriver do obiektu.
COleDispatchDriver::operator LPDISPATCH Uzyskuje dostęp do bazowego IDispatch wskaźnika.

Publiczne elementy członkowskie danych

Nazwa/nazwisko opis
COleDispatchDriver::m_bAutoRelease Określa, czy zwalniać IDispatch podczas ReleaseDispatch lub niszczenie obiektu.
COleDispatchDriver::m_lpDispatch Wskazuje wskaźnik do interfejsu dołączonego IDispatch do tego COleDispatchDriverelementu .

Uwagi

COleDispatchDriver nie ma klasy bazowej.

Interfejsy wysyłania OLE zapewniają dostęp do metod i właściwości obiektu. Funkcje składowe dołączania COleDispatchDriver , odłączania, tworzenia i wydawania połączenia wysyłania typu IDispatch. Inne funkcje składowe używają list argumentów zmiennych, aby uprościć wywoływanie elementu IDispatch::Invoke.

Tej klasy można używać bezpośrednio, ale jest ona zwykle używana tylko przez klasy utworzone przez Kreatora dodawania klas. Podczas tworzenia nowych klas języka C++ przez zaimportowanie biblioteki typów nowe klasy pochodzą z COleDispatchDriverklasy .

Aby uzyskać więcej informacji na temat korzystania z programu COleDispatchDriver, zobacz następujące artykuły:

Hierarchia dziedziczenia

COleDispatchDriver

Wymagania

Nagłówek: afxdisp.h

COleDispatchDriver::AttachDispatch

Wywołaj funkcję składową, AttachDispatch aby dołączyć IDispatch wskaźnik do COleDispatchDriver obiektu. Aby uzyskać więcej informacji, zobacz Implementowanie interfejsu IDispatch.

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

Parametry

lpDispatch
Wskaźnik do obiektu OLE IDispatch , który ma zostać dołączony do COleDispatchDriver obiektu.

bAutoRelease
Określa, czy wysyłka ma zostać wydana, gdy ten obiekt wykracza poza zakres.

Uwagi

Ta funkcja zwalnia wszystkie IDispatch wskaźniki, które są już dołączone do COleDispatchDriver obiektu.

Przykład

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 Tworzy obiekt.

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

Parametry

lpDispatch
Wskaźnik do obiektu OLE IDispatch , który ma zostać dołączony do COleDispatchDriver obiektu.

bAutoRelease
Określa, czy wysyłka ma zostać wydana, gdy ten obiekt wykracza poza zakres.

dispatchSrc
Odwołanie do istniejącego COleDispatchDriver obiektu.

Uwagi

Formularz COleDispatchDriver( LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE ) łączy interfejs IDispatch .

Formularz COleDispatchDriver( const COleDispatchDriver& dispatchSrc ) kopiuje istniejący COleDispatchDriver obiekt i zwiększa liczbę odwołań.

Formularz COleDispatchDriver( ) tworzy obiekt, COleDispatchDriver ale nie łączy interfejsu IDispatch . Przed użyciem COleDispatchDriver( )IDispatch argumentów bez argumentów należy połączyć się z nim przy użyciu COleDispatchDriver::CreateDispatch lub COleDispatchDriver::AttachDispatch. Aby uzyskać więcej informacji, zobacz Implementowanie interfejsu IDispatch.

Przykład

Zobacz przykład COleDispatchDriver::CreateDispatch.

COleDispatchDriver::CreateDispatch

Tworzy obiekt interfejsu IDispatch i dołącza go do COleDispatchDriver obiektu.

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

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

Parametry

Clsid
Identyfikator IDispatch klasy obiektu połączenia, który ma zostać utworzony.

Perror
Wskaźnik do obiektu wyjątku OLE, który będzie przechowywać kod stanu wynikający z utworzenia.

lpszProgID
Wskaźnik do identyfikatora programowego, takiego jak "Excel.Document.5", obiektu automatyzacji, dla którego ma zostać utworzony obiekt wysyłania.

Wartość zwracana

Nonzero na sukces; w przeciwnym razie 0.

Przykład

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

Odłącza bieżące IDispatch połączenie od tego obiektu.

LPDISPATCH DetachDispatch();

Wartość zwracana

Wskaźnik do wcześniej dołączonego obiektu OLE IDispatch .

Uwagi

Element IDispatch nie jest zwalniany.

Aby uzyskać więcej informacji na temat typu LPDISPATCH, zobacz Implementowanie interfejsu IDispatch w zestawie Windows SDK.

Przykład

LPDISPATCH CreateLPDispatch(LPCTSTR lpszProgId)
{
   COleDispatchDriver disp;

   disp.CreateDispatch(lpszProgId);

   return disp.DetachDispatch();
}

COleDispatchDriver::GetProperty

Pobiera właściwość obiektu określoną przez dwDispID.

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

Parametry

dwDispID
Identyfikuje właściwość do pobrania.

vtProp
Określa właściwość, która ma zostać pobrana. Aby uzyskać możliwe wartości, zobacz sekcję Uwagi dla COleDispatchDriver::InvokeHelper.

pvProp
Adres zmiennej, która otrzyma wartość właściwości. Musi być zgodny z typem określonym przez vtProp.

Przykład

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

COleDispatchDriver::InvokeHelper

Wywołuje metodę obiektu lub właściwość określoną przez dwDispID w kontekście określonym przez wFlags.

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

Parametry

dwDispID
Identyfikuje metodę lub właściwość do wywołania.

opóźnienia wFlags
Flagi opisujące kontekst wywołania metody IDispatch::Invoke. . Aby uzyskać listę możliwych wartości, zobacz parametr wFlags w IDispatch::Invoke w zestawie SDK systemu Windows.

vtRet
Określa typ wartości zwracanej. Aby uzyskać możliwe wartości, zobacz sekcję Uwagi.

pvRet
Adres zmiennej, która otrzyma wartość właściwości lub wartość zwracaną. Musi być zgodny z typem określonym przez vtRet.

pbParamInfo
Wskaźnik do ciągu zakończonych wartości null bajtów określających typy parametrów po pbParamInfo.

...
Lista zmiennych parametrów typów określonych w pliku pbParamInfo.

Uwagi

Parametr pbParamInfo określa typy parametrów przekazywanych do metody lub właściwości. Lista zmiennych argumentów jest reprezentowana przez ... w deklaracji składni.

Możliwe wartości argumentu vtRet są pobierane z wyliczenia VARENUM. Dopuszczalne są następujące wartości:

Symbol Zwracany typ
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 WARIANT
VT_UNKNOWN LPUNKNOWN

Argument pbParamInfo to rozdzielona spacjami lista VTS_ stałych. Co najmniej jedna z tych wartości oddzielona spacjami (nie przecinkami) określa listę parametrów funkcji. Możliwe wartości są wyświetlane w makrze EVENT_CUSTOM .

Ta funkcja konwertuje parametry na wartości VARIANTARG, a następnie wywołuje metodę IDispatch::Invoke . Jeśli wywołanie nie powiedzie się Invoke , ta funkcja zgłosi wyjątek. Jeśli zwrócony przez IDispatch::Invoke element SCODE (kod stanu) jest DISP_E_EXCEPTION, ta funkcja zgłasza obiekt COleException. W przeciwnym razie zgłasza wyjątek COleDispatchException.

Aby uzyskać więcej informacji, zobacz VARIANTARG, Implementowanie interfejsu IDispatch, IDispatch::Invoke i struktura kodów błędów COM w zestawie Windows SDK.

Przykład

Zobacz przykład COleDispatchDriver::CreateDispatch.

COleDispatchDriver::m_bAutoRelease

Jeśli wartość TRUE, obiekt COM, do których uzyskuje dostęp m_lpDispatch , zostanie automatycznie zwolniony, gdy zostanie wywołana funkcja ReleaseDispatch lub gdy ten COleDispatchDriver obiekt zostanie zniszczony.

BOOL m_bAutoRelease;

Uwagi

Domyślnie m_bAutoRelease jest ustawiona wartość TRUE w konstruktorze.

Aby uzyskać więcej informacji na temat wydawania obiektów COM, zobacz Implementowanie zliczania odwołań i IUnknown::Release w zestawie Windows SDK.

Przykład

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

Wskaźnik do interfejsu dołączonego IDispatch do tego COleDispatchDriverelementu .

LPDISPATCH m_lpDispatch;

Uwagi

Element m_lpDispatch członkowski danych jest zmienną publiczną typu LPDISPATCH.

Aby uzyskać więcej informacji, zobacz IDispatch w zestawie Windows SDK.

Przykład

Zobacz przykład COleDispatchDriver::AttachDispatch.

COleDispatchDriver::operator =

Kopiuje wartość źródłową COleDispatchDriver do obiektu.

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

Parametry

dispatchSrc
Wskaźnik do istniejącego COleDispatchDriver obiektu.

COleDispatchDriver::operator LPDISPATCH

Uzyskuje dostęp do bazowego IDispatchCOleDispatchDriver wskaźnika obiektu.

operator LPDISPATCH();

Przykład

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 Zwalnia połączenie. Aby uzyskać więcej informacji, zobacz Implementowanie interfejsu IDispatch

void ReleaseDispatch();

Uwagi

Jeśli dla tego połączenia ustawiono automatyczne wydanie, ta funkcja wywołuje IDispatch::Release je przed wydaniem interfejsu.

Przykład

Zobacz przykład COleDispatchDriver::AttachDispatch.

COleDispatchDriver::SetProperty

Ustawia właściwość obiektu OLE określoną przez dwDispID.

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

Parametry

dwDispID
Określa właściwość, która ma zostać ustawiona.

vtProp
Określa typ właściwości, która ma zostać ustawiona. Aby uzyskać możliwe wartości, zobacz sekcję Uwagi dla COleDispatchDriver::InvokeHelper.

...
Pojedynczy parametr typu określony przez vtProp.

Przykład

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

Zobacz też

Przykład MFC — CALCDRIV
Przykładowa usługa ACDUAL MFC
Wykres hierarchii
Klasa CCmdTarget