Aracılığıyla paylaş


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:

  1. Yönetilen nesne ile yerel ara sunucu (örneğin, CCW) arasında verimli eşleme.
  2. Yerel IUnknown ve yönetilen ara sunucusu (örneğin RCW) arasında verimli eşleme.
  3. 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 IUnknownkuralları 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.