Bagikan melalui


Kelas COleDispatchDriver

Mengimplementasikan sisi klien otomatisasi OLE.

Sintaks

class COleDispatchDriver

Anggota

Konstruktor Publik

Nama Deskripsi
COleDispatchDriver::COleDispatchDriver Membuat COleDispatchDriver objek.

Metode Publik

Nama Deskripsi
COleDispatchDriver::AttachDispatch Melampirkan IDispatch koneksi ke COleDispatchDriver objek.
COleDispatchDriver::CreateDispatch IDispatch Membuat koneksi dan melampirkannya ke COleDispatchDriver objek.
COleDispatchDriver::D etachDispatch IDispatch Melepaskan koneksi, tanpa melepaskannya.
COleDispatchDriver::GetProperty Mendapatkan properti otomatisasi.
COleDispatchDriver::InvokeHelper Pembantu untuk memanggil metode otomatisasi.
COleDispatchDriver::ReleaseDispatch Merilis IDispatch koneksi.
COleDispatchDriver::SetProperty Mengatur properti otomatisasi.

Operator Publik

Nama Deskripsi
COleDispatchDriver::operator = Menyalin nilai sumber ke COleDispatchDriver dalam objek.
COleDispatchDriver::operator LPDISPATCH Mengakses penunjuk yang mendasar IDispatch .

Anggota Data Publik

Nama Deskripsi
COleDispatchDriver::m_bAutoRelease Menentukan apakah akan melepaskan IDispatch selama ReleaseDispatch atau penghancuran objek.
COleDispatchDriver::m_lpDispatch Menunjukkan penunjuk ke antarmuka yang IDispatch dilampirkan ke ini COleDispatchDriver.

Keterangan

COleDispatchDriver tidak memiliki kelas dasar.

Antarmuka pengiriman OLE menyediakan akses ke metode dan properti objek. Fungsi anggota melampirkan COleDispatchDriver , melepaskan, membuat, dan merilis koneksi pengiriman jenis IDispatch. Fungsi anggota lain menggunakan daftar argumen variabel untuk menyederhanakan panggilan IDispatch::Invoke.

Kelas ini dapat digunakan secara langsung, tetapi umumnya hanya digunakan oleh kelas yang dibuat oleh wizard Tambahkan Kelas. Saat Anda membuat kelas C++ baru dengan mengimpor pustaka jenis, kelas baru berasal dari COleDispatchDriver.

Untuk informasi selengkapnya tentang menggunakan COleDispatchDriver, lihat artikel berikut ini:

Hierarki Warisan

COleDispatchDriver

Persyaratan

Header: afxdisp.h

COleDispatchDriver::AttachDispatch

AttachDispatch Panggil fungsi anggota untuk melampirkan IDispatch penunjuk ke COleDispatchDriver objek. Untuk informasi selengkapnya, lihat Menerapkan Antarmuka IDispatch.

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

Parameter

lpDispatch
Penunjuk ke objek OLE IDispatch yang akan dilampirkan ke COleDispatchDriver objek.

bAutoRelease
Menentukan apakah pengiriman akan dirilis ketika objek ini keluar dari cakupan.

Keterangan

Fungsi ini merilis penunjuk apa pun IDispatch yang sudah dilampirkan ke COleDispatchDriver objek.

Contoh

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

Membuat COleDispatchDriver objek.

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

Parameter

lpDispatch
Penunjuk ke objek OLE IDispatch yang akan dilampirkan ke COleDispatchDriver objek.

bAutoRelease
Menentukan apakah pengiriman akan dirilis ketika objek ini keluar dari cakupan.

dispatchSrc
Referensi ke objek yang sudah ada COleDispatchDriver .

Keterangan

Formulir COleDispatchDriver( LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE ) menyambungkan antarmuka IDispatch .

Formulir COleDispatchDriver( const COleDispatchDriver& dispatchSrc ) menyalin objek yang ada COleDispatchDriver dan meningkatkan jumlah referensi.

Formulir COleDispatchDriver( ) membuat COleDispatchDriver objek tetapi tidak menyambungkan IDispatch antarmuka. Sebelum menggunakan COleDispatchDriver( ) tanpa argumen, Anda harus menyambungkan IDispatch ke argumen tersebut menggunakan COleDispatchDriver::CreateDispatch atau COleDispatchDriver::AttachDispatch. Untuk informasi selengkapnya, lihat Menerapkan Antarmuka IDispatch.

Contoh

Lihat contoh untuk COleDispatchDriver::CreateDispatch.

COleDispatchDriver::CreateDispatch

Membuat objek antarmuka IDispatch dan melampirkannya ke COleDispatchDriver objek.

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

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

Parameter

clsid
ID Kelas objek koneksi yang IDispatch akan dibuat.

pError
Pointer ke objek pengecualian OLE, yang akan menyimpan kode status yang dihasilkan dari pembuatan.

lpszProgID
Penunjuk ke pengidentifikasi terprogram, seperti "Excel.Document.5", dari objek otomatisasi tempat objek pengiriman akan dibuat.

Tampilkan Nilai

Nonzero pada kesuksesan; jika tidak, 0.

Contoh

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

Copot sambungan saat ini IDispatch dari obyek ini.

LPDISPATCH DetachDispatch();

Tampilkan Nilai

Penunjuk ke objek OLE IDispatch yang dilampirkan sebelumnya.

Keterangan

IDispatch Tidak dirilis.

Untuk informasi selengkapnya tentang jenis LPDISPATCH, lihat Menerapkan Antarmuka IDispatch di Windows SDK.

Contoh

LPDISPATCH CreateLPDispatch(LPCTSTR lpszProgId)
{
   COleDispatchDriver disp;

   disp.CreateDispatch(lpszProgId);

   return disp.DetachDispatch();
}

COleDispatchDriver::GetProperty

Mendapatkan properti objek yang ditentukan oleh dwDispID.

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

Parameter

dwDispID
Mengidentifikasi properti yang akan diambil.

vtProp
Menentukan properti yang akan diambil. Untuk nilai yang mungkin, lihat bagian Keterangan untuk COleDispatchDriver::InvokeHelper.

pvProp
Alamat variabel yang akan menerima nilai properti. Ini harus cocok dengan jenis yang ditentukan oleh vtProp.

Contoh

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

COleDispatchDriver::InvokeHelper

Memanggil metode objek atau properti yang ditentukan oleh dwDispID, dalam konteks yang ditentukan oleh wFlags.

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

Parameter

dwDispID
Mengidentifikasi metode atau properti yang akan dipanggil.

wFlags
Bendera yang menjelaskan konteks panggilan ke IDispatch::Invoke. . Untuk daftar nilai yang mungkin, lihat parameter wFlags di IDispatch::Invoke di Windows SDK.

vtRet
Menentukan jenis nilai yang dikembalikan. Untuk nilai yang mungkin, lihat bagian Keterangan.

pvRet
Alamat variabel yang akan menerima nilai properti atau mengembalikan nilai. Ini harus cocok dengan jenis yang ditentukan oleh vtRet.

pbParamInfo
Penunjuk ke string byte yang dihentikan null yang menentukan jenis parameter berikut pbParamInfo.

...
Daftar variabel parameter, jenis yang ditentukan dalam pbParamInfo.

Keterangan

Parameter pbParamInfo menentukan jenis parameter yang diteruskan ke metode atau properti . Daftar variabel argumen diwakili oleh ... dalam deklarasi sintaks.

Nilai yang mungkin untuk argumen vtRet diambil dari enumerasi VARENUM. Kemungkinan nilainya adalah sebagai berikut:

Simbol Jenis Hasil
VT_EMPTY void
VT_I2 short
VT_I4 long
VT_R4 float
VT_R8 double
VT_CY CY
VT_DATE TANGGAL
VT_BSTR BSTR
VT_DISPATCH LPDISPATCH
VT_ERROR SCODE
VT_BOOL BOOL
VT_VARIANT VARIAN
VT_UNKNOWN LPUNKNOWN

Argumen pbParamInfo adalah daftar konstanta VTS_ yang dipisahkan spasi. Satu atau beberapa nilai ini, dipisahkan oleh spasi (bukan koma), menentukan daftar parameter fungsi. Nilai yang mungkin tercantum dengan makro EVENT_CUSTOM .

Fungsi ini mengonversi parameter menjadi nilai VARIANTARG, lalu memanggil metode IDispatch::Invoke . Jika panggilan gagal Invoke , fungsi ini akan melemparkan pengecualian. Jika SCODE (kode status) yang dikembalikan oleh IDispatch::Invoke DISP_E_EXCEPTION, fungsi ini melempar objek COleException ; jika tidak, fungsi ini akan melempar COleDispatchException.

Untuk informasi selengkapnya, lihat VARIANTARG, Menerapkan Antarmuka IDispatch, IDispatch::Invoke, dan Struktur Kode Kesalahan COM di Windows SDK.

Contoh

Lihat contoh untuk COleDispatchDriver::CreateDispatch.

COleDispatchDriver::m_bAutoRelease

Jika TRUE, objek COM yang diakses oleh m_lpDispatch akan secara otomatis dirilis ketika ReleaseDispatch dipanggil atau ketika objek ini COleDispatchDriver dihancurkan.

BOOL m_bAutoRelease;

Keterangan

Secara default, m_bAutoRelease diatur ke TRUE di konstruktor.

Untuk informasi selengkapnya tentang merilis objek COM, lihat Menerapkan Penghitungan Referensi dan IUnknown::Release di Windows SDK.

Contoh

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

Penunjuk ke antarmuka yang IDispatch dilampirkan ke ini COleDispatchDriver.

LPDISPATCH m_lpDispatch;

Keterangan

Anggota m_lpDispatch data adalah variabel publik jenis LPDISPATCH.

Untuk informasi selengkapnya, lihat IDispatch di Windows SDK.

Contoh

Lihat contoh untuk COleDispatchDriver::AttachDispatch.

COleDispatchDriver::operator =

Menyalin nilai sumber ke COleDispatchDriver dalam objek.

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

Parameter

dispatchSrc
Penunjuk ke objek yang sudah ada COleDispatchDriver .

COleDispatchDriver::operator LPDISPATCH

Mengakses penunjuk objek yang COleDispatchDriver mendasarIDispatch.

operator LPDISPATCH();

Contoh

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

Merilis IDispatch koneksi. Untuk informasi selengkapnya, lihat Menerapkan Antarmuka IDispatch

void ReleaseDispatch();

Keterangan

Jika rilis otomatis telah diatur untuk koneksi ini, fungsi ini akan memanggil sebelum merilis IDispatch::Release antarmuka.

Contoh

Lihat contoh untuk COleDispatchDriver::AttachDispatch.

COleDispatchDriver::SetProperty

Mengatur properti objek OLE yang ditentukan oleh dwDispID.

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

Parameter

dwDispID
Mengidentifikasi properti yang akan diatur.

vtProp
Menentukan tipe properti yang akan disetel. Untuk nilai yang mungkin, lihat bagian Keterangan untuk COleDispatchDriver::InvokeHelper.

...
Parameter tunggal dari jenis yang ditentukan oleh vtProp.

Contoh

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

Lihat juga

Sampel MFC CALCDRIV
AKDUAL Sampel MFC
Bagan Hierarki
Kelas CCmdTarget