atribut objek
Atribut antarmuka [objek] mengidentifikasi antarmuka COM. (Daftar atribut antarmuka yang tidak menyertakan atribut [objek] menunjukkan antarmuka RPC DCE.)
[
object,
uuid(string-uuid)
[ , interface-attribute-list]
]
interface interface-name : base-interface
{
...
}
Parameter
-
string-uuid
-
String UUID yang dihasilkan oleh utilitas Uuidgen. Anda dapat mengapit string UUID dalam tanda kutip.
-
interface-attribute-list
-
Atribut lain yang berlaku untuk antarmuka secara keseluruhan.
-
nama antarmuka
-
Nama antarmuka.
-
antarmuka dasar
-
Antarmuka COM dari mana antarmuka ini berasal. Antarmuka dasar harus IUnknown, IDispatch, atau antarmuka COM lain yang berasal, baik secara langsung maupun tidak langsung, dari IUnknown atau IDispatch.
Keterangan
Daftar atribut antarmuka untuk antarmuka COM harus menyertakan atribut[uuid], tetapi tidak dapat menyertakan atribut[versi].
Secara default, mengkompilasi antarmuka COM dengan pengkompilasi MIDL menghasilkan file yang diperlukan untuk membangun DLL proksi. DLL ini berisi kode untuk mendukung penggunaan antarmuka COM kustom oleh aplikasi klien dan server objek. Namun, jika daftar atribut antarmuka untuk antarmuka COM menentukan atribut[lokal], pengkompilasi MIDL hanya menghasilkan file header antarmuka.
Pengkompilasi MIDL secara otomatis menghasilkan jenis data antarmuka untuk antarmuka COM. Sebagai alternatif, Anda dapat menggunakan typedef dengan kata kunci antarmuka untuk secara eksplisit menentukan jenis data antarmuka. Spesifikasi antarmuka kemudian dapat menggunakan jenis data antarmuka dalam parameter fungsi dan mengembalikan nilai, anggota struct dan union , dan deklarasi jenis lainnya. Contoh berikut mengilustrasikan penggunaan jenis data IStream yang dihasilkan secara otomatis:
[
object,
uuid (ABCDEFOO-1234-1234-5678-ABCDEF123456)
]
interface IStream : IUnknown
{
typedef IStream * LPSTREAM;
// Other interface definition statements.
}
Dalam antarmuka COM, semua fungsi anggota antarmuka diasumsikan sebagai fungsi virtual. Fungsi virtual memiliki penunjuk ini implisit sebagai parameter pertama. Tabel fungsi virtual berisi entri untuk setiap fungsi anggota antarmuka.
Fungsi anggota antarmuka objek non-[lokal] harus memiliki nilai pengembalian HRESULT atau SCODE. (Perhatikan bahwa versi MIDL yang lebih lama memungkinkan fungsi anggota untuk mengembalikan kekosongan. Namun, dimulai dengan MIDL versi 3.0, mengembalikan kekosongan menghasilkan kesalahan kompilator.) Memiliki nilai pengembalian HRESULT atau SCODE berarti bahwa jika pengecualian dihasilkan selama panggilan jarak jauh, proksi yang dihasilkan menangkap pengecualian dan mengembalikan kode pengecualian dalam nilai yang dikembalikan. Jika aplikasi Anda mampu mengabaikan kesalahan yang terjadi selama panggilan prosedur jarak jauh, Anda dapat menentukan HRESULT sebagai jenis pengembalian tanpa memeriksa nilai pengembalian setelah panggilan.
Jika Anda menyusun ulang aplikasi lama, mengubah jenis pengembalian dapat menyebabkan masalah kompatibilitas mundur ketika server mengirim hasil yang baru diperkenalkan ke klien. Sebagai alternatif untuk mengubah jenis pengembalian, Anda dapat memberi label fungsi yang mengembalikan kekosongan dengan atribut [call_as] , sehingga menjadikannya fungsi lokal. Kemudian tentukan fungsi jarak jauh terkait dengan parameter yang sama tetapi dengan jenis pengembalian HRESULT. Fungsi lokal dapat meningkatkan pengecualian berdasarkan nilai HRESULT tersebut, jika perlu.
Atribut [object] tidak tersedia saat Anda mengkompilasi menggunakan compiler MIDL /osf switch.
Contoh
[
uuid(12345678-1234-1234-1234-123456789ABC),
object
]
interface IMyInterface : IUnknown
{
// Interface definition statements.
}
[
uuid(87654321-1234-1234-1234-123456789ABC),
object,
local
]
interface ILocalInterface : ISomeOldCOMInterface
{
// Interface definition statements.
}
Lihat juga