Bagikan melalui


Kelas System.Runtime.InteropServices.ComWrappers

Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.

ComWrappers API menyediakan dukungan untuk IUnknown API yang independen dari dukungan interoperabilitas COM bawaan. ComWrappers API memaparkan dukungan runtime minimal yang diperlukan pengembang untuk mengganti versi bawaan dengan cara yang efisien.

Secara tradisional dalam runtime, proksi asli ke objek terkelola disebut COM Callable Wrapper (CCW), dan proksi terkelola ke objek asli disebut Runtime Callable Wrapper (RCW). Namun, ketika digunakan di sini, istilah-istilah tersebut tidak boleh dikacaukan dengan fitur bawaan dengan nama yang sama (yaitu, CCW dan RCW). Tidak seperti fitur bawaan, sebagian besar tanggung jawab untuk manajemen seumur hidup yang akurat, metode pengiriman, dan marsekal argumen dan nilai pengembalian diserahkan kepada ComWrappers pelaksana.

"Dukungan minimal" didefinisikan oleh fitur-fitur berikut:

  1. Pemetaan efisien antara objek terkelola dan proksi asli (misalnya, CCW).
  2. Pemetaan efisien antara proksi asli IUnknown dan terkelolanya (misalnya, RCW).
  3. Integrasi dengan pengumpul sampah melalui kontrak antarmuka IReferenceTrackerHost .

Memanfaatkan ini adalah skenario lanjutan.

Status proksi

Bagian ini memberikan deskripsi dan ilustrasi status proksi asli dan terkelola setelah pembuatannya masing-masing.

Dalam ilustrasi berikut, referensi yang kuat digambarkan sebagai garis solid (===) dan referensi lemah digambarkan sebagai garis putus-putus (= = =). Istilah "referensi yang kuat" dan "referensi lemah" harus ditafsirkan sebagai "memperpanjang masa pakai" dan "tidak memperpanjang masa pakai", dibandingkan dengan menyiratkan implementasi tertentu.

Ilustrasi berikut menunjukkan status objek terkelola dan proksi asli setelah panggilan ke ComWrappers.GetOrCreateComInterfaceForObject(Object, CreateComInterfaceFlags).

 --------------------                  ----------------------
|   Managed object   |                |     Native proxy     |
|                    |                | Ref count: 1         |
|  ----------------  |                |  ------------------  |
| | Weak reference |=| = = = = = = = >| | Strong reference | |
| |    to proxy    | |<===============|=|    to object     | |
|  ----------------  |                |  ------------------  |
 --------------------                  ----------------------

Ilustrasi berikutnya menunjukkan status objek asli dan proksi terkelola setelah panggilan ke ComWrappers.GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags). Konsep "identitas" mengikuti aturan untuk IUnknown.

 ------------------               ------------------
|  Native object   |< = = = = = =|                  |
| Ref count: +1    |             | Mapping from     |
 ------------------              | native identity  |
 ------------------------        | to managed proxy |
|   Managed proxy        |< = = =|                  |
| Created by ComWrappers |        ------------------
|   implementer.        |
| Optional AddRef() on   |
|   native object.      |
 ------------------------

Amati bahwa hanya referensi lemah yang ada dari perspektif runtime. Jumlah +1 referensi pada objek asli diasumsikan dilakukan oleh pembuat proksi terkelola (yaitu, ComWrappers pelaksana) untuk memastikan masa pakai terkait antara objek asli dan proksi terkelolanya. Ada referensi kuat opsional (yaitu, AddRef()) yang disebutkan dalam proksi terkelola, yang digunakan untuk mendukung skenario (3) yang disebutkan sebelumnya. Lihat CreateObjectFlags.TrackerObject. Dengan referensi kuat opsional ini, jumlah referensinya adalah +2.