System.Runtime.InteropServices.ComWrappers sınıfı
Bu makale, bu API'nin başvuru belgelerine ek açıklamalar sağlar.
API, ComWrappers yerleşik COM birlikte çalışabilirlik desteğinden bağımsız olarak API için IUnknown
destek sağlar. API, ComWrappers
geliştiricilerin yerleşik sürümü verimli bir şekilde değiştirmesi için gereken en düşük çalışma zamanı desteğini kullanıma sunar.
Geleneksel olarak çalışma zamanında, yönetilen nesnenin yerel ara sunucusuNA COM Çağrılabilir Sarmalayıcı (CCW) adı verilir ve yerel nesnenin yönetilen ara sunucusuna Çalışma Zamanı Çağrılabilir Sarmalayıcı (RCW) adı verilir. Ancak, burada kullanıldığında, bu terimler aynı adı taşıyan yerleşik özelliklerle (yani CCW ve RCW) karıştırılmamalıdır. Yerleşik özelliklerden farklı olarak, doğru yaşam süresi yönetimi, dağıtım yöntemleri ve bağımsız değişkenlerin ve dönüş değerlerinin sıralama sorumluluğunun çoğu uygulayıcıya ComWrappers
bırakılır.
"Minimum destek" aşağıdaki özelliklerle tanımlanır:
- Yönetilen nesne ile yerel ara sunucu (örneğin, CCW) arasında verimli eşleme.
- Yerel
IUnknown
ve yönetilen ara sunucusu (örneğin RCW) arasında verimli eşleme. - IReferenceTrackerHost arabirim sözleşmesi aracılığıyla çöp toplayıcı ile tümleştirme.
Bu, gelişmiş bir senaryodur.
Proxy durumu
Bu bölümde, ilgili oluşturulduktan sonra yerel ve yönetilen proxy durumunun açıklamaları ve çizimleri sağlanır.
Aşağıdaki çizimlerde, güçlü bir başvuru düz çizgi (===
) ve zayıf başvuru kesikli çizgi (= = =
) olarak gösterilmiştir. "Güçlü başvuru" ve "zayıf başvuru" terimleri, belirli bir uygulamayı ima etmek yerine "yaşam süresini uzatan" ve "ömrünü uzatmayan" olarak yorumlanmalıdır.
Aşağıdaki çizimde, çağrısından ComWrappers.GetOrCreateComInterfaceForObject(Object, CreateComInterfaceFlags)sonra yönetilen nesnenin ve yerel proxy'nin durumu gösterilmektedir.
-------------------- ----------------------
| Managed object | | Native proxy |
| | | Ref count: 1 |
| ---------------- | | ------------------ |
| | Weak reference |=| = = = = = = = >| | Strong reference | |
| | to proxy | |<===============|=| to object | |
| ---------------- | | ------------------ |
-------------------- ----------------------
Sonraki çizimde, çağrısından ComWrappers.GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags)sonra yerel nesnenin ve yönetilen proxy'nin durumu gösterilir. "Kimlik" kavramı için IUnknown
kuralları izler.
------------------ ------------------
| Native object |< = = = = = =| |
| Ref count: +1 | | Mapping from |
------------------ | native identity |
------------------------ | to managed proxy |
| Managed proxy |< = = =| |
| Created by ComWrappers | ------------------
| implementer. |
| Optional AddRef() on |
| native object. |
------------------------
Çalışma zamanı perspektifinden yalnızca zayıf başvuruların var olduğunu gözlemleyin. +1
Yerel nesnedeki başvuru sayısının, yerel nesne ile yönetilen proxy'si arasındaki ilişkili yaşam süresinden emin olmak için yönetilen ara sunucu oluşturucusu (yani ComWrappers
uygulayıcı) tarafından gerçekleştirileceği varsayılır. Daha önce bahsedilen senaryoyu (3) desteklemek için kullanılan yönetilen proxy'de belirtilen isteğe bağlı bir güçlü başvuru (yani AddRef()
) vardır. Bkz. CreateObjectFlags.TrackerObject. Bu isteğe bağlı güçlü başvuruyla, başvuru sayısı olacaktır +2
.