Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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:
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:
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. |