Bagikan melalui


Pembungkus COM

COM berbeda dari model objek runtime .NET dalam beberapa hal penting:

  • Klien objek COM harus mengelola masa pakai objek tersebut; runtime bahasa umum mengelola masa pakai objek hanya di lingkungannya.

  • Klien objek COM dapat mengetahui ketersediaan layanan dengan meminta antarmuka yang menyediakan layanan tersebut dan mendapatkan penunjuk antarmuka, atau tidak. Klien objek .NET dapat memperoleh deskripsi fungsionalitas objek menggunakan pantulan.

  • Objek NET berada dalam memori yang dikelola oleh lingkungan eksekusi runtime .NET. Lingkungan eksekusi dapat memindahkan objek dalam memori karena alasan performa dan memperbarui semua referensi ke objek yang dipindahkannya. Klien yang tidak dikelola, setelah mendapatkan penunjuk ke objek, mengandalkan objek untuk tetap berada di lokasi yang sama. Klien ini tidak memiliki mekanisme untuk menangani objek yang lokasinya tidak tetap.

Untuk mengatasi perbedaan ini, runtime menyediakan kelas pembungkus untuk membuat klien terkelola dan tidak terkelola berpikir mereka memanggil objek dalam lingkungan masing-masing. Setiap kali klien terkelola Anda memanggil metode pada objek COM, runtime membuat pembungkus yang dapat dipanggil runtime (RCW). RCW mengabstraksi perbedaan antara mekanisme referensi yang dikelola dan tidak dikelola, antara lain. Runtime juga membuat COM callable wrapper (CCW) untuk membalikkan proses, memungkinkan klien COM untuk memanggil metode pada objek .NET dengan lancar. Seperti yang ditunjukkan oleh ilustrasi berikut, perspektif kode panggilan menentukan kelas pembungkus mana yang dibuat runtime.

COM wrapper overview

Dalam kebanyakan kasus, RCW standar atau CCW yang dihasilkan oleh runtime menyediakan pengawalan yang memadai untuk panggilan yang melintasi perbatasan antara COM dan runtime .NET. Dengan menggunakan atribut kustom, Anda dapat secara opsional menyesuaikan cara runtime menyatakan kode terkelola dan tidak terkelola.

Lihat juga