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