Peta Pengiriman
OLE Automation menyediakan cara untuk memanggil metode dan mengakses properti di seluruh aplikasi. Mekanisme yang disediakan oleh Pustaka Kelas Microsoft Foundation untuk mengirimkan permintaan ini adalah "peta pengiriman," yang menunjuk nama internal dan eksternal fungsi dan properti objek, serta jenis data properti itu sendiri dan argumen fungsi.
Kirim makro peta | Deskripsi |
---|---|
DECLARE_DISPATCH_MAP | Menyatakan bahwa peta pengiriman akan digunakan untuk mengekspos metode dan properti kelas (harus digunakan dalam deklarasi kelas). |
BEGIN_DISPATCH_MAP | Memulai definisi peta pengiriman. |
END_DISPATCH_MAP | Mengakhiri definisi peta pengiriman. |
DISP_FUNCTION | Digunakan dalam peta pengiriman untuk menentukan fungsi otomatisasi OLE. |
DISP_PROPERTY | Menentukan properti otomatisasi OLE. |
DISP_PROPERTY_EX | Menentukan properti otomatisasi OLE dan memberi nama fungsi Dapatkan dan Atur. |
DISP_PROPERTY_NOTIFY | Menentukan properti otomatisasi OLE dengan pemberitahuan. |
DISP_PROPERTY_PARAM | Menentukan properti otomatisasi OLE yang mengambil parameter dan memberi nama fungsi Dapatkan dan Atur. |
DISP_DEFVALUE | Menjadikan properti yang ada sebagai nilai default objek. |
DECLARE_DISPATCH_MAP
CCmdTarget
Jika kelas -turunan dalam program Anda mendukung OLE Automation, kelas tersebut harus menyediakan peta pengiriman untuk mengekspos metode dan propertinya.
DECLARE_DISPATCH_MAP()
Keterangan
Gunakan makro DECLARE_DISPATCH_MAP di akhir deklarasi kelas Anda. Kemudian, di . File CPP yang menentukan fungsi anggota untuk kelas , gunakan makro BEGIN_DISPATCH_MAP. Kemudian sertakan entri makro untuk setiap metode dan properti kelas Anda yang diekspos (DISP_FUNCTION, DISP_PROPERTY, dan sebagainya). Terakhir, gunakan makro END_DISPATCH_MAP.
Catatan
Jika Anda mendeklarasikan anggota apa pun setelah DECLARE_DISPATCH_MAP, Anda harus menentukan jenis akses baru ( public
, private
, atau protected
) untuk mereka.
Wizard Aplikasi dan wizard kode membantu membuat kelas Automation dan dalam mempertahankan peta pengiriman. Untuk informasi selengkapnya tentang peta pengiriman, lihat Server Automation.
Contoh
class CMyServerDoc : public COleServerDoc
{
DECLARE_DISPATCH_MAP()
// Remainder of class declaration omitted.
Persyaratan
Header: afxwin.h
BEGIN_DISPATCH_MAP
Menyatakan definisi peta pengiriman Anda.
BEGIN_DISPATCH_MAP(theClass, baseClass)
Parameter
theClass
Menentukan nama kelas yang memiliki peta pengiriman ini.
baseClass
Menentukan nama kelas dasar dari theClass.
Keterangan
Dalam file implementasi (.cpp) yang menentukan fungsi anggota untuk kelas Anda, mulai peta pengiriman dengan makro BEGIN_DISPATCH_MAP, tambahkan entri makro untuk setiap fungsi dan properti pengiriman Anda, dan selesaikan peta pengiriman dengan makro END_DISPATCH_MAP.
Persyaratan
Header: afxdisp.h
END_DISPATCH_MAP
Mengakhiri definisi peta pengiriman Anda.
END_DISPATCH_MAP()
Keterangan
Ini harus digunakan bersama dengan BEGIN_DISPATCH_MAP.
Persyaratan
Header: afxdisp.h
DISP_FUNCTION
Menentukan fungsi otomatisasi OLE dalam peta pengiriman.
DISP_FUNCTION(
theClass,
pszName,
pfnMember,
vtRetVal,
vtsParams)
Parameter
theClass
Nama kelas.
pszName
Nama eksternal fungsi.
pfnMember
Nama fungsi anggota.
vtRetVal
Nilai yang menentukan jenis pengembalian fungsi.
vtsParams
Daftar yang dipisahkan spasi dari satu atau beberapa konstanta yang menentukan daftar parameter fungsi.
Keterangan
Argumen vtRetVal berjenis VARTYPE. Kemungkinan nilai berikut untuk argumen ini diambil dari VARENUM
enumerasi:
Simbol | Tipe 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 vtsParams adalah daftar nilai yang dipisahkan spasi dari VTS_*
konstanta. Satu atau beberapa nilai ini dipisahkan oleh spasi (bukan koma) menentukan daftar parameter fungsi. Contohnya,
VTS_I2 VTS_PI2
menentukan daftar yang berisi bilangan bulat pendek diikuti dengan penunjuk ke bilangan bulat pendek.
Konstanta VTS_
dan maknanya adalah sebagai berikut:
Simbol | Jenis parameter |
---|---|
VTS_I2 | short |
VTS_I4 | long |
VTS_R4 | float |
VTS_R8 | double |
VTS_CY | const CY atau CY* |
VTS_DATE | TANGGAL |
VTS_BSTR | LPCSTR |
VTS_DISPATCH | LPDISPATCH |
VTS_SCODE | SCODE |
VTS_BOOL | BOOL |
VTS_VARIANT | const VARIANT* atau VARIANT& |
VTS_UNKNOWN | LPUNKNOWN |
VTS_PI2 | pendek* |
VTS_PI4 | panjang* |
VTS_PR4 | mengapung* |
VTS_PR8 | dobel* |
VTS_PCY | CY* |
VTS_PDATE | DATE* |
VTS_PBSTR | BSTR* |
VTS_PDISPATCH | LPDISPATCH* |
VTS_PSCODE | SCODE* |
VTS_PBOOL | BOOL* |
VTS_PVARIANT | VARIANT* |
VTS_PUNKNOWN | LPUNKNOWN* |
VTS_NONE | Tidak ada parameter |
Persyaratan
Header: afxdisp.h
DISP_PROPERTY
Menentukan properti otomatisasi OLE dalam peta pengiriman.
DISP_PROPERTY(
theClass,
pszName,
memberName,
vtPropType)
Parameter
theClass
Nama kelas.
pszName
Nama eksternal properti.
memberName
Nama variabel anggota tempat properti disimpan.
vtPropType
Nilai yang menentukan jenis properti.
Keterangan
Argumen vtPropType berjenis VARTYPE. Nilai yang mungkin untuk argumen ini diambil dari enumerasi VARENUM:
Simbol | Jenis properti |
---|---|
VT_I2 | short |
VT_I4 | long |
VT_R4 | float |
VT_R8 | double |
VT_CY | CY |
VT_DATE | TANGGAL |
VT_BSTR | CString |
VT_DISPATCH | LPDISPATCH |
VT_ERROR | SCODE |
VT_BOOL | BOOL |
VT_VARIANT | VARIAN |
VT_UNKNOWN | LPUNKNOWN |
Ketika klien eksternal mengubah properti, nilai variabel anggota yang ditentukan oleh memberName berubah; tidak ada pemberitahuan tentang perubahan.
Persyaratan
Header: afxdisp.h
DISP_PROPERTY_EX
Menentukan properti otomatisasi OLE dan memberi nama fungsi yang digunakan untuk mendapatkan dan mengatur nilai properti dalam peta pengiriman.
DISP_PROPERTY_EX(
theClass,
pszName,
memberGet,
memberSet,
vtPropType)
Parameter
theClass
Nama kelas.
pszName
Nama eksternal properti.
memberGet
Nama fungsi anggota yang digunakan untuk mendapatkan properti .
memberSet
Nama fungsi anggota yang digunakan untuk mengatur properti.
vtPropType
Nilai yang menentukan jenis properti.
Keterangan
Fungsi memberGet dan memberSet memiliki tanda tangan yang ditentukan oleh argumen vtPropType . Fungsi memberGet tidak mengambil argumen dan mengembalikan nilai dari jenis yang ditentukan oleh vtPropType. Fungsi memberSet mengambil argumen dari jenis yang ditentukan oleh vtPropType dan tidak mengembalikan apa pun.
Argumen vtPropType berjenis VARTYPE. Nilai yang mungkin untuk argumen ini diambil dari enumerasi VARENUM. Untuk daftar nilai ini, lihat Komentar untuk parameter vtRetVal di DISP_FUNCTION. Perhatikan bahwa VT_EMPTY, yang tercantum dalam keterangan DISP_FUNCTION, tidak diizinkan sebagai jenis data properti.
Persyaratan
Header: afxdisp.h
DISP_PROPERTY_NOTIFY
Menentukan properti otomatisasi OLE dengan pemberitahuan dalam peta pengiriman.
DISP_PROPERTY_NOTIFY(
theClass,
szExternalName,
memberName,
pfnAfterSet,
vtPropType)
Parameter
theClass
Nama kelas.
szExternalName
Nama eksternal properti.
memberName
Nama variabel anggota tempat properti disimpan.
pfnAfterSet
Nama fungsi pemberitahuan untuk szExternalName.
vtPropType
Nilai yang menentukan jenis properti.
Keterangan
Tidak seperti properti yang ditentukan dengan DISP_PROPERTY, properti yang ditentukan dengan DISP_PROPERTY_NOTIFY akan secara otomatis memanggil fungsi yang ditentukan oleh pfnAfterSet saat properti diubah.
Argumen vtPropType berjenis VARTYPE. Nilai yang mungkin untuk argumen ini diambil dari enumerasi VARENUM:
Simbol | Jenis properti |
---|---|
VT_I2 | short |
VT_I4 | long |
VT_R4 | float |
VT_R8 | double |
VT_CY | CY |
VT_DATE | TANGGAL |
VT_BSTR | CString |
VT_DISPATCH | LPDISPATCH |
VT_ERROR | SCODE |
VT_BOOL | BOOL |
VT_VARIANT | VARIAN |
VT_UNKNOWN | LPUNKNOWN |
Persyaratan
Header: afxdisp.h
DISP_PROPERTY_PARAM
Menentukan properti yang diakses dengan fungsi terpisah Get
dan Set
anggota.
DISP_PROPERTY_PARAM(
theClass,
pszExternalName,
pfnGet,
pfnSet,
vtPropType,
vtsParams)
Parameter
theClass
Nama kelas.
pszExternalName
Nama eksternal properti.
pfnGet
Nama fungsi anggota yang digunakan untuk mendapatkan properti .
pfnSet
Nama fungsi anggota yang digunakan untuk mengatur properti.
vtPropType
Nilai yang menentukan jenis properti.
vtsParams
String jenis parameter varian yang dipisahkan VTS_*
spasi, satu untuk setiap parameter.
Keterangan
Tidak seperti makro DISP_PROPERTY_EX, makro ini memungkinkan Anda menentukan daftar parameter untuk properti . Ini berguna untuk menerapkan properti yang diindeks atau diparameterkan.
Contoh
Pertimbangkan deklarasi fungsi dapatkan dan atur anggota berikut yang memungkinkan pengguna meminta baris dan kolom tertentu saat mengakses properti:
SHORT GetArray(SHORT row, SHORT column);
void SetArray(SHORT row, SHORT column, SHORT newVal);
Ini sesuai dengan makro DISP_PROPERTY_PARAM berikut dalam peta pengiriman kontrol:
DISP_PROPERTY_PARAM(CMFCActiveXControlCtrl, "Array", GetArray, SetArray, VT_I2, VTS_I2 VTS_I2)
Sebagai contoh lain, pertimbangkan fungsi dapatkan dan atur anggota berikut:
IDispatch* GetItem(SHORT index1, SHORT index2, SHORT index3);
void SetItem(SHORT index1, SHORT index2, SHORT index3, IDispatch* pVal);
Ini sesuai dengan makro DISP_PROPERTY_PARAM berikut dalam peta pengiriman kontrol:
DISP_PROPERTY_PARAM(CMFCActiveXControlCtrl, "Item", GetItem, SetItem, VT_DISPATCH, VTS_I2 VTS_I2 VTS_I2)
Persyaratan
Header: afxdisp.h
DISP_DEFVALUE
Menjadikan properti yang ada sebagai nilai default objek.
DISP_DEFVALUE(theClass, pszName)
Parameter
theClass
Nama kelas.
pszName
Nama eksternal properti yang mewakili "nilai" objek.
Keterangan
Menggunakan nilai default dapat membuat pemrograman objek otomatisasi Anda lebih sederhana untuk aplikasi Visual Basic.
"Nilai default" objek Anda adalah properti yang diambil atau diatur saat referensi ke objek tidak menentukan properti atau fungsi anggota.
Persyaratan
Header: afxdisp.h