Share via


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

CCmdTargetJika 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 Jenis Pengembalian
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 Lama*
VTS_PR4 Float*
VTS_PR8 Double*
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

Baca juga

Makro dan Global