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

call_as

File Definisi Antarmuka (IDL)

iid_is

Antarmuka

Lokal

/osf

typedef

uuid

Versi