atribut dispinterface
Pernyataan dispinterface mendefinisikan sekumpulan properti dan metode tempat Anda dapat memanggil IDispatch::Invoke. Dispinterface dapat ditentukan dengan secara eksplisit mencantumkan kumpulan metode dan properti yang didukung (Sintaks 1), atau dengan mencantumkan satu antarmuka (Sintaks 2).
[
[attributes]
]
dispinterface dispinterface-name
{
properties:
property-list
methods:
method-list
};
[
[attributes]
]
dispinterface dispinterface-name
{
interface interface-name
};
Parameter
-
Atribut
-
Menentukan atribut yang berlaku untuk seluruh dispinterface. Atribut berikut diterima: [helpstring], [helpcontext], [helpfile], [hidden], [nonextensible], [oleautomation], [restricted], [uuid], dan [version].
-
dispinterface-name
-
Nama yang dikenal dispinterface dalam pustaka jenis. Nama ini harus unik dalam pustaka jenis.
-
daftar properti
-
(Sintaks 1) Daftar properti opsional yang didukung oleh objek , dinyatakan dalam bentuk variabel. Ini adalah bentuk pendek untuk mendeklarasikan fungsi properti dalam daftar metode. Lihat bagian komentar untuk detailnya.
-
daftar metode
-
(Sintaks 1) Daftar yang terdiri dari prototipe fungsi untuk setiap metode dan properti dalam dispinterface. Sejumlah definisi fungsi dapat muncul dalam methlist. Fungsi dalam methlist memiliki bentuk berikut:
[atribut]returntype methname type paramname(params);
Atribut berikut diterima pada metode dalam dispinterface: [helpstring], [helpcontext], [propget], [propput], [propputref], [string], dan [vararg]. Jika [vararg] ditentukan, parameter terakhir harus merupakan array aman dari jenis VARIAN .
Daftar parameter adalah daftar yang dibatasi koma, setiap elemen di antaranya memiliki formulir berikut:
[atribut]
Jenisnya dapat berupa jenis apa pun yang dideklarasikan atau bawaan, atau penunjuk ke jenis apa pun. Atribut pada parameter adalah:
-
nama antarmuka
-
(Sintaks 2) Nama antarmuka yang akan dinyatakan sebagai antarmuka IDispatch.
Keterangan
Pengkompilasi MIDL menerima pengurutan parameter berikut (dari kiri-ke-kanan):
- Parameter yang diperlukan (parameter yang tidak memiliki atribut [defaultvalue] atau [opsional]),
- parameter opsional dengan atau tanpa atribut [defaultvalue],
- parameter dengan atribut [opsional] dan tanpa atribut [defaultvalue],
- [ lcid] parameter, jika ada,
- [ retval] parameter
Fungsi metode ditentukan persis seperti yang dijelaskan di halaman referensi untuk modul kecuali bahwa atribut [ entri] tidak diizinkan. Perhatikan bahwa STDOLE32. TLB (STDOLE. TLB pada sistem 16-bit) harus diimpor, karena dispinterface mewarisi dari IDispatch.
Anda dapat mendeklarasikan properti dalam daftar properti atau metode. Mendeklarasikan properti dalam daftar properti tidak menunjukkan jenis akses yang didukung properti (yaitu, dapatkan, letakkan, atau letakkan). Tentukan atribut [ readonly] untuk properti yang tidak mendukung put atau putref. Jika Anda mendeklarasikan fungsi properti dalam daftar metode, fungsi untuk satu properti semuanya memiliki pengidentifikasi yang sama.
Menggunakan sintaks pertama, properti: dan metode: tag diperlukan. Atribut [ id] juga diperlukan pada setiap anggota. Contohnya:
properties:
[id(0)] int Value; // Default property.
methods:
[id(1)] HRESULT Show();
Tidak seperti anggota antarmuka, anggota dispinterface tidak dapat menggunakan atribut retval untuk mengembalikan nilai selain kode kesalahan HRESULT. Atribut [ lcid] juga tidak valid untuk dispinterfaces, karena IDispatch::Invoke melewati LCID. Namun, dimungkinkan untuk mendeklarasi ulang antarmuka yang menggunakan atribut ini.
Dengan menggunakan sintaks kedua, antarmuka yang mendukung IDispatch dan dideklarasikan sebelumnya dalam skrip ODL dapat dinyatakan ulang sebagai antarmuka IDispatch sebagai berikut:
dispinterface helloPro
{
interface hello;
};
Contoh sebelumnya mendeklarasikan semua anggota hello dan semua anggota yang diwarisi hello sebagai pendukung IDispatch. Dalam hal ini, jika hello dideklarasikan sebelumnya dengan anggota [lcid] dan [retval] yang mengembalikan HRESULTs, MkTypLib akan menghapus setiap parameter [lcid] dan jenis pengembalian HRESULT, dan sebaliknya menandai jenis pengembalian sebagai parameter [retval].
Catatan
Alat Mktyplib.exe usang. Gunakan pengkompilasi MIDL sebagai gantinya.
Properti dan metode dispinterface bukan bagian dari VTBL dari dispinterface. Akibatnya, CreateStdDispatch dan DispInvoke tidak dapat digunakan untuk mengimplementasikan IDispatch::Invoke. Dispinterface digunakan ketika aplikasi perlu mengekspos fungsi non-VTBL yang ada melalui Automation. Aplikasi ini dapat mengimplementasikan IDispatch::Invoke dengan memeriksa parameter dispidMember dan langsung memanggil fungsi yang sesuai.
Contoh
[
uuid(1e196b20-1f3c-1069-996b-00dd010fe676),
version(1.0),
helpstring("Useful help string."),
helpcontext(2480)
]
dispinterface MyDispatchObject
{
properties:
[id(1)] int x; //An integer property named x
[id(2)] BSTR y; //A string property named y
methods:
[id(3)] HRESULT show(); //No arguments, no result
[id(11)] int computeit(int inarg, double *outarg);
};
[
uuid(1e123456-1f3c-1069-996b-00dd010fe676)
]
dispinterface MyObject
{
properties:
methods:
[id(1), propget, bindable, defaultbind, displaybind] long x();
[id(1), propput, bindable, defaultbind,
displaybind] HRESULT x(long rhs);
}
Lihat juga