Bagikan melalui


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 antarmuka IUnknown 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 pada komputer jarak jauh. Gunakan pointer ke IUnknown, jika perlu.

Catatan

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 atribut alokasi ) 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 nilai pengembalian HRESULT Anda 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 keluar, bukan HRESULT, untuk mengembalikan informasi khusus untuk panggilan fungsi.

Untuk mengetahui informasi selengkapnya, lihat topik berikut:

Definisi Antarmuka dan Pustaka Tipe