Aracılığıyla paylaş


COleDispatchDriver Sınıfı

OLE otomasyonunun istemci tarafını uygular.

Sözdizimi

class COleDispatchDriver

Üyeler

Ortak Oluşturucular

Veri Akışı Adı Açıklama
COleDispatchDriver::COleDispatchDriver Bir COleDispatchDriver nesne oluşturur.

Genel Yöntemler

Veri Akışı Adı Açıklama
COleDispatchDriver::AttachDispatch Nesneye COleDispatchDriver bir IDispatch bağlantı ekler.
COleDispatchDriver::CreateDispatch Bir IDispatch bağlantı oluşturur ve nesneye COleDispatchDriver ekler.
COleDispatchDriver::D etachDispatch Bağlantıyı IDispatch serbest bırakmadan ayırır.
COleDispatchDriver::GetProperty Otomasyon özelliğini alır.
COleDispatchDriver::InvokeHelper Otomasyon yöntemlerini çağırmak için yardımcı.
COleDispatchDriver::ReleaseDispatch Bir IDispatch bağlantı serbest bırakır.
COleDispatchDriver::SetProperty Otomasyon özelliğini ayarlar.

Ortak İşleçler

Veri Akışı Adı Açıklama
COleDispatchDriver::operator = Kaynak değeri nesnesine COleDispatchDriver kopyalar.
COleDispatchDriver::operator LPDISPATCH Temel alınan IDispatch işaretçiye erişir.

Ortak Veri Üyeleri

Veri Akışı Adı Açıklama
COleDispatchDriver::m_bAutoRelease sırasında veya nesne yok etme sırasında IDispatch ReleaseDispatch serbest bırakılıp bırakılmayacağını belirtir.
COleDispatchDriver::m_lpDispatch Bu COleDispatchDriveröğesine eklenmiş arabirimin IDispatch işaretçisini gösterir.

Açıklamalar

COleDispatchDriver temel sınıfına sahip değildir.

OLE dağıtım arabirimleri bir nesnenin yöntemlerine ve özelliklerine erişim sağlar. türüne sahip COleDispatchDriver bir dağıtım bağlantısı ekleme, ayırma, oluşturma ve serbest bırakmanın IDispatchüye işlevleri. Diğer üye işlevleri, çağrıyı IDispatch::Invokebasitleştirmek için değişken bağımsız değişken listelerini kullanır.

Bu sınıf doğrudan kullanılabilir, ancak genellikle yalnızca Sınıf Ekleme sihirbazı tarafından oluşturulan sınıflar tarafından kullanılır. Tür kitaplığını içeri aktararak yeni C++ sınıfları oluşturduğunuzda, yeni sınıflar türünden COleDispatchDrivertüretilir.

kullanma COleDispatchDriverhakkında daha fazla bilgi için aşağıdaki makalelere bakın:

Devralma Hiyerarşisi

COleDispatchDriver

Gereksinimler

Üst bilgi: afxdisp.h

COleDispatchDriver::AttachDispatch

Nesneye AttachDispatch bir IDispatch işaretçi eklemek için üye işlevini çağırın COleDispatchDriver . Daha fazla bilgi için bkz . IDispatch Arabirimini Uygulama.

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

Parametreler

lpDispatch
Nesneye eklenecek ole IDispatch nesnesinin işaretçisi COleDispatchDriver .

bAutoRelease
Bu nesne kapsam dışına çıktığında gönderimin serbest bırakılıp bırakılmayacağını belirtir.

Açıklamalar

Bu işlev, nesneye zaten eklenmiş olan tüm IDispatch işaretçileri COleDispatchDriver serbest bırakır.

Örnek

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

Bir COleDispatchDriver nesne oluşturur.

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

Parametreler

lpDispatch
Nesneye eklenecek ole IDispatch nesnesinin işaretçisi COleDispatchDriver .

bAutoRelease
Bu nesne kapsam dışına çıktığında gönderimin serbest bırakılıp bırakılmayacağını belirtir.

dispatchSrc
Var olan COleDispatchDriver bir nesneye başvuru.

Açıklamalar

FormCOleDispatchDriver( LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE ), IDispatch arabirimini bağlar.

Form COleDispatchDriver( const COleDispatchDriver& dispatchSrc ) varolan COleDispatchDriver bir nesneyi kopyalar ve başvuru sayısını artırır.

Form COleDispatchDriver( ) bir COleDispatchDriver nesne oluşturur ancak arabirimi bağlamaz IDispatch . Bağımsız değişkenler olmadan kullanmadan COleDispatchDriver( ) önce COleDispatchDriver::CreateDispatch veya COleDispatchDriver::AttachDispatch kullanarak bir IDispatch bağlamanız gerekir. Daha fazla bilgi için bkz . IDispatch Arabirimini Uygulama.

Örnek

COleDispatchDriver::CreateDispatch örneğine bakın.

COleDispatchDriver::CreateDispatch

Bir IDispatch arabirim nesnesi oluşturur ve nesneye COleDispatchDriver ekler.

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

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

Parametreler

clsid
Oluşturulacak bağlantı nesnesinin IDispatch sınıf kimliği.

pError
Oluşturma işleminden kaynaklanan durum kodunu tutacak bir OLE özel durum nesnesi işaretçisi.

lpszProgID
Dağıtım nesnesinin oluşturulacağı otomasyon nesnesinin "Excel.Document.5" gibi programlı tanımlayıcısına yönelik işaretçi.

Dönüş Değeri

Başarıda sıfır olmayan; aksi takdirde 0.

Örnek

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

Geçerli IDispatch bağlantıyı bu nesneden ayırır.

LPDISPATCH DetachDispatch();

Dönüş Değeri

Önceden eklenmiş OLE IDispatch nesnesinin işaretçisi.

Açıklamalar

IDispatch serbest bırakılmaz.

LPDISPATCH türü hakkında daha fazla bilgi için bkz . Windows SDK'da IDispatch Arabirimini Uygulama.

Örnek

LPDISPATCH CreateLPDispatch(LPCTSTR lpszProgId)
{
   COleDispatchDriver disp;

   disp.CreateDispatch(lpszProgId);

   return disp.DetachDispatch();
}

COleDispatchDriver::GetProperty

dwDispID tarafından belirtilen nesne özelliğini alır.

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

Parametreler

dwDispID
Alınacak özelliği tanımlar.

vtProp
Alınacak özelliği belirtir. Olası değerler için COleDispatchDriver::InvokeHelper için Açıklamalar bölümüne bakın.

pvProp
Özellik değerini alacak değişkenin adresi. vtProp tarafından belirtilen türle eşleşmelidir.

Örnek

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

COleDispatchDriver::InvokeHelper

wFlags tarafından belirtilen bağlamda dwDispID tarafından belirtilen nesne yöntemini veya özelliğini çağırır.

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

Parametreler

dwDispID
Çağrılacak yöntemi veya özelliği tanımlar.

wFlags
çağrısının IDispatch::Invokebağlamını açıklayan bayraklar. . Olası değerlerin listesi için Windows SDK'sında IDispatch::Invoke içindeki wFlags parametresine bakın.

vtRet
Dönüş değerinin türünü belirtir. Olası değerler için Açıklamalar bölümüne bakın.

pvRet
Özellik değerini veya dönüş değerini alacak değişkenin adresi. vtRet tarafından belirtilen türle eşleşmelidir.

pbParamInfo
PbParamInfo'nun ardından parametrelerin türlerini belirten null olarak sonlandırılan bayt dizesi işaretçisi.

...
PbParamInfo'da belirtilen türlerdeki parametrelerin değişken listesi.

Açıklamalar

pbParamInfo parametresi, yönteme veya özelliğe geçirilen parametre türlerini belirtir. Bağımsız değişkenlerin değişken listesi, söz dizimi bildiriminde ... ile temsil edilir.

vtRet bağımsız değişkeninin olası değerleri VARENUM numaralandırmasından alınır. Olası değerler aşağıdaki gibidir:

Simge Dönüş Türü
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 VARYANT
VT_UNKNOWN LPUNKNOWN

pbParamInfo bağımsız değişkeni, VTS_ sabitlerinin boşlukla ayrılmış bir listesidir. Bu değerlerden biri veya daha fazlası boşluklarla (virgülle değil) ayrılmış olarak işlevin parametre listesini belirtir. Olası değerler EVENT_CUSTOM makroyla birlikte listelenir.

Bu işlev parametreleri VARIANTARG değerlerine dönüştürür ve ardından IDispatch::Invoke yöntemini çağırır. çağrısı Invoke başarısız olursa, bu işlev bir özel durum oluşturur. tarafından IDispatch::Invoke döndürülen SCODE (durum kodu) DISP_E_EXCEPTION ise, bu işlev bir COleException nesnesi oluşturur; aksi takdirde bir COleDispatchException oluşturur.

Daha fazla bilgi için bkz . VARIANTARG, IDispatch Arabirimini Uygulama, IDispatch::Invoke ve Windows SDK'da COM Hata Kodlarının Yapısı.

Örnek

COleDispatchDriver::CreateDispatch örneğine bakın.

COleDispatchDriver::m_bAutoRelease

TRUE ise, m_lpDispatch tarafından erişilen COM nesnesi ReleaseDispatch çağrıldığında veya bu COleDispatchDriver nesne yok edildiğinde otomatik olarak serbest bırakılır.

BOOL m_bAutoRelease;

Açıklamalar

Varsayılan olarak, m_bAutoRelease oluşturucuda TRUE olarak ayarlanır.

COM nesnelerini yayımlama hakkında daha fazla bilgi için bkz . Windows SDK'sında Başvuru Sayma ve IUnknown::Release Uygulama.

Örnek

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

Bu COleDispatchDriveröğesine eklenmiş arabirimin IDispatch işaretçisi.

LPDISPATCH m_lpDispatch;

Açıklamalar

Veri m_lpDispatch üyesi, LPDISPATCH türünde bir ortak değişkendir.

Daha fazla bilgi için bkz . Windows SDK'sında IDispatch .

Örnek

COleDispatchDriver::AttachDispatch örneğine bakın.

COleDispatchDriver::operator =

Kaynak değeri nesnesine COleDispatchDriver kopyalar.

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

Parametreler

dispatchSrc
Var olan COleDispatchDriver bir nesnenin işaretçisi.

COleDispatchDriver::operator LPDISPATCH

Nesnenin temel işaretçisine IDispatch erişir COleDispatchDriver .

operator LPDISPATCH();

Örnek

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

Bağlantıyı serbest bırakır IDispatch . Daha fazla bilgi için bkz . IDispatch Arabirimini Uygulama

void ReleaseDispatch();

Açıklamalar

Bu bağlantı için otomatik yayın ayarlandıysa, bu işlev arabirimi yayınlamadan önce çağırır IDispatch::Release .

Örnek

COleDispatchDriver::AttachDispatch örneğine bakın.

COleDispatchDriver::SetProperty

dwDispID tarafından belirtilen OLE nesnesi özelliğini ayarlar.

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

Parametreler

dwDispID
Ayarlanacak özelliği tanımlar.

vtProp
Ayarlanacak özelliğin türünü belirtir. Olası değerler için COleDispatchDriver::InvokeHelper için Açıklamalar bölümüne bakın.

...
vtProp tarafından belirtilen türde tek bir parametre.

Örnek

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

Ayrıca bkz.

MFC Örnek CALCDRIV
MFC Örnek ACDUAL
Hiyerarşi Grafiği
CCmdTarget Sınıfı