Aturan Desain Antarmuka
Bagian ini menyediakan ringkasan singkat tentang aturan dan panduan desain antarmuka. Beberapa aturan ini khusus untuk arsitektur COM, sementara yang lain adalah pembatasan yang diberlakukan oleh bahasa desain antarmuka, MIDL. Untuk detail desain antarmuka COM, lihat Anatomi File IDL.
Menurut definisi, objek bukan objek COM kecuali mengimplementasikan antarmukaIUnknown atau antarmuka yang berasal dari IUnknown. Selain itu, aturan berikut berlaku untuk semua antarmuka yang diterapkan pada objek COM:
- Mereka harus memiliki pengidentifikasi antarmuka unik (IID).
- Mereka harus tidak dapat diubah. Setelah dibuat dan diterbitkan, tidak ada bagian dari definisi mereka yang dapat berubah.
- Semua metode antarmuka harus mengembalikan nilai HRESULT sehingga bagian sistem yang menangani pemrosesan jarak jauh dapat melaporkan kesalahan RPC.
- Semua parameter string dalam metode antarmuka harus Unicode.
- Jenis data Anda harus dapat diremobilitas. Jika Anda tidak dapat mengonversi jenis data ke jenis yang dapat diremobilitas, Anda harus membuat rutinitas marshaling dan unmarshaling Anda sendiri. Selain itu, LPVOID, atau batal *, tidak memiliki arti di komputer jarak jauh. Gunakan pointer untuk IUnknown, jika perlu.
Nota
Implementasi MIDL saat ini tidak menangani kelebihan beban fungsi atau beberapa pewarisan.
Pertimbangan Desain Antarmuka Lainnya
Gunakan pointer untuk data dengan sangat hati-hati. Untuk membuat ulang data di ruang alamat proses yang dipanggil, run time RPC harus mengetahui ukuran data yang tepat. Jika, misalnya, parameter CHAR * menunjuk ke buffer karakter daripada ke satu karakter, data tidak dapat dibuat ulang dengan benar. Gunakan sintaks yang tersedia dengan MIDL untuk menggambarkan struktur data yang diwakili oleh definisi jenis Anda secara akurat.
Inisialisasi sangat penting untuk pointer yang disematkan dalam array dan struktur dan diteruskan di seluruh batas proses. Pointer yang tidak diinisialisasi dapat berfungsi ketika diteruskan ke program dalam ruang proses yang sama, tetapi proksi dan stub mengasumsikan bahwa semua pointer diinisialisasi dengan alamat yang valid atau null.
Berhati-hatilah saat alias penunjuk (memungkinkan pointer untuk menunjuk ke bagian memori yang sama). Jika alias disengaja, pointer ini harus dinyatakan alias dalam file IDL. Penunjuk yang dinyatakan sebagai nonalisis tidak boleh saling alias.
Perhatikan bagaimana Anda mengalokasikan dan membebaskan memori. Ingatlah bahwa, kecuali Anda secara eksplisit memberi tahu objek COM (dengan menggunakan mengalokasikan atribut) untuk tidak membebaskan struktur data yang dibuat selama panggilan di luar proses, struktur tersebut akan dihancurkan ketika panggilan selesai. Selain itu, pertimbangkan overhead yang berpotensi merusak yang dibuat oleh alokasi struktur data yang tidak efisien yang sekarang perlu dirusak dan tidak dirusak.
Terakhir, berhati-hatilah saat mendefinisikan HRESULT mengembalikan nilai sehingga Anda tidak membuat kode kesalahan yang bertentangan dengan kode FACILITY_ITF yang ditentukan COM (nilai antara 0x0000 dan 0x01FF dicadangkan) atau yang bertentangan dengan nilai HRESULT lainnya dengan nilai yang sama. Jika memungkinkan, gunakan nilai keberhasilan dan kegagalan COM universal, dan gunakan parameter, bukan HRESULT, untuk mengembalikan informasi khusus untuk panggilan fungsi.
Untuk informasi selengkapnya, lihat topik berikut ini:
- Merancang Antarmuka yang Dapat Diremotable
- Menggunakan Antarmuka COM
Topik terkait
-
Definisi Antarmuka dan Pustaka Jenis