Bagikan melalui


Pembungkus yang Dapat Dipanggil Runtime

Lingkungan kerja bahasa umum mengekspos objek COM melalui proksi yang disebut pembungkus pemanggilan lingkungan kerja (RCW). Meskipun RCW tampak seperti objek biasa bagi klien .NET, fungsi utamanya adalah untuk mengatur panggilan antara klien .NET dan objek COM.

Runtime membuat tepat satu RCW untuk setiap objek COM, terlepas dari jumlah referensi yang ada pada objek tersebut. Runtime mempertahankan satu RCW di setiap proses untuk setiap objek. Jika Anda membuat RCW dalam satu domain aplikasi atau apartemen, dan kemudian meneruskan referensi ke domain aplikasi atau apartemen lain, proksi ke objek pertama akan digunakan. Perhatikan bahwa proksi ini adalah objek terkelola baru dan tidak sama dengan RCW awal; ini berarti dua objek terkelola tidak sama tetapi mewakili objek COM yang sama. Seperti yang ditunjukkan oleh ilustrasi berikut, sejumlah klien terkelola dapat menyimpan referensi ke objek COM yang mengekspos INew dan INewer antarmuka.

Gambar berikut menunjukkan proses untuk mengakses objek COM melalui pembungkus yang dapat dipanggil runtime:

Proses untuk mengakses objek COM melalui RCW.

Menggunakan metadata yang berasal dari pustaka tipe, runtime membangun objek COM yang dipanggil dan sebuah pembungkus untuk objek tersebut. Setiap RCW mempertahankan cache penunjuk antarmuka pada objek COM yang dibungkusnya dan merilis referensinya pada objek COM ketika RCW tidak lagi diperlukan. Runtime melakukan pengumpulan sampah di RCW.

Di antara kegiatan lainnya, RCW mengelola data antara kode terkelola dan tidak terkelola, untuk objek yang dibungkus. Secara khusus, RCW menyediakan marshalling untuk argumen metode dan nilai pengembalian metode setiap kali klien dan server memiliki representasi data yang berbeda yang diberikan di antara keduanya.

Pembungkus standar memberlakukan aturan marshalling bawaan. Misalnya, ketika klien .NET meneruskan jenis string sebagai bagian dari argumen ke objek yang tidak dikelola, pembungkus mengonversi string ke jenis BSTR. Jika objek COM mengembalikan ke pemanggil terkelolanya BSTR , pemanggil menerima string. Klien dan server mengirim dan menerima data yang akrab untuk mereka. Jenis lain tidak memerlukan konversi. Misalnya, pembungkus standar akan selalu melewati bilangan bulat 4 byte antara kode terkelola dan tidak terkelola tanpa mengonversi jenisnya.

Marshalling antarmuka yang dipilih

Tujuan utama pembungkus yang dapat dipanggil runtime (RCW) adalah untuk menyembunyikan perbedaan antara model pemrograman yang dikelola dan tidak dikelola. Untuk membuat transisi yang mulus, RCW mengonsumsi antarmuka COM yang dipilih tanpa mengeksposnya ke klien .NET, seperti yang ditunjukkan dalam ilustrasi berikut.

Gambar berikut menunjukkan antarmuka COM dan pembungkus yang dapat dipanggil runtime:

Cuplikan layar pembungkus antarmuka yang dapat dipanggil saat runtime.

Ketika dibuat sebagai objek yang terikat awal, RCW adalah jenis yang spesifik. Ini mengimplementasikan antarmuka yang diterapkan objek COM dan mengekspos metode, properti, dan peristiwa dari antarmuka objek. Dalam ilustrasi, RCW mengekspos antarmuka INew tetapi mengonsumsi antarmuka IUnknown dan IDispatch. Lebih lanjut, RCW mengekspos semua anggota antarmuka INew ke klien .NET.

RCW menggunakan antarmuka yang tercantum dalam tabel berikut, yang diekspos oleh objek yang dibungkusnya.

Antarmuka Deskripsi
IDispatch Untuk pengikatan terlambat ke objek COM melalui pantulan.
IErrorInfo Menyediakan deskripsi tekstual tentang kesalahan, sumbernya, file Bantuan, konteks Bantuan, dan GUID antarmuka yang menentukan kesalahan (selalu GUID_NULL untuk kelas .NET).
IProvideClassInfo Jika objek COM yang dibungkus mengimplementasikan IProvideClassInfo, RCW mengekstrak informasi jenis dari antarmuka ini untuk memberikan identitas jenis yang lebih baik.
IUnknown Untuk identitas objek, konversi tipe, dan manajemen siklus hidup:

- Identitas objek
Runtime membedakan antara objek COM dengan membandingkan nilai antarmuka IUnknown untuk setiap objek.
- Pemakaian jenis
RCW mengenali penemuan jenis dinamis yang dilakukan oleh metode QueryInterface .
- Manajemen seumur hidup
Dengan menggunakan metode QueryInterface , RCW mendapatkan dan menyimpan referensi ke objek yang tidak dikelola sampai runtime melakukan pengumpulan sampah pada pembungkus, yang merilis objek yang tidak dikelola.

RCW secara opsional menggunakan antarmuka yang tercantum dalam tabel berikut, yang diekspos oleh objek yang dibungkusnya.

Antarmuka Deskripsi
IConnectionPoint dan IConnectionPointContainer RCW mengonversi objek yang mengekspos gaya peristiwa titik koneksi ke peristiwa berbasis delegasi.
IDispatchEx (Hanya .NET Framework) Jika kelas mengimplementasikan IDispatchEx, RCW mengimplementasikan IExpando. Antarmuka IDispatchEx adalah ekstensi antarmuka IDispatch yang, tidak seperti IDispatch, memungkinkan enumerasi, penambahan, penghapusan, dan panggilan anggota yang peka huruf besar/kecil.
IEnumVARIANT Memungkinkan jenis COM yang mendukung enumerasi untuk diperlakukan sebagai koleksi.

Lihat juga