Çalışma Zamanı Aranabilir Sarmalayıcısı
Ortak dil çalışma zamanı, COM nesnelerini çalışma zamanı çağrılabilir sarmalayıcı (RCW) adlı bir ara sunucu aracılığıyla kullanıma sunar. RCW, .NET istemcileri için sıradan bir nesne gibi görünse de, birincil işlevi bir .NET istemcisi ile COM nesnesi arasında çağrıları sıralamaktır.
Çalışma zamanı, bu nesnede var olan başvuru sayısından bağımsız olarak her COM nesnesi için tam olarak bir RCW oluşturur. Çalışma zamanı, her nesne için işlem başına tek bir RCW tutar. Bir uygulama etki alanında veya dairede RCW oluşturur ve sonra başka bir uygulama etki alanına veya daireye başvuru geçirirseniz, ilk nesneye bir proxy kullanılır. Bu proxy'nin yeni bir yönetilen nesne olduğunu ve ilk RCW ile aynı olmadığını unutmayın; Bu, yönetilen iki nesnenin eşit olmadığı ancak aynı COM nesnesini temsil etmediği anlamına gelir. Aşağıdaki çizimde gösterildiği gibi, herhangi bir sayıda yönetilen istemci, ve arabirimleri kullanıma INew
INewer
sunan COM nesnelerine bir başvuru tutabilir.
Aşağıdaki görüntüde, çalışma zamanı çağrılabilen sarmalayıcı aracılığıyla COM nesnelerine erişme işlemi gösterilmektedir:
Çalışma zamanı, tür kitaplığından türetilen meta verileri kullanarak hem çağrılan COM nesnesini hem de bu nesne için bir sarmalayıcı oluşturur. Her RCW, sarmalandığı COM nesnesinde arabirim işaretçilerinin önbelleğini tutar ve RCW artık gerekli olmadığında başvurusunu COM nesnesinde serbest bırakır. Çalışma zamanı RCW üzerinde çöp toplama gerçekleştirir.
RcW, diğer etkinliklerin arasında, sarmalanan nesne adına yönetilen ve yönetilmeyen kod arasında verileri sıralar. Özellikle RCW, istemci ve sunucu arasında geçirilen verilerin farklı gösterimlerine sahip olduğunda yöntem bağımsız değişkenleri ve yöntem dönüş değerleri için sıralama sağlar.
Standart sarmalayıcı yerleşik marshalling kurallarını zorunlu kılar. Örneğin, bir .NET istemcisi bir bağımsız değişkenin parçası olarak bir türü yönetilmeyen bir nesneye geçirirse string
, sarmalayıcı öğesini string
bir BSTR
türe dönüştürür. COM nesnesi yönetilen çağırana bir BSTR
döndürürse, çağıran bir string
alır. hem istemci hem de sunucu, kendilerine tanıdık gelen verileri gönderir ve alır. Diğer türler dönüştürme gerektirmez. Örneğin, standart sarmalayıcı türü dönüştürmeden yönetilen ve yönetilmeyen kod arasında her zaman 4 baytlık bir tamsayı geçirir.
Seçili arabirimleri hazırlama
Çalışma zamanı çağrılabilen sarmalayıcının (RCW) birincil hedefi, yönetilen ve yönetilmeyen programlama modelleri arasındaki farkları gizlemektir. Sorunsuz bir geçiş oluşturmak için RCW, aşağıdaki çizimde gösterildiği gibi seçili COM arabirimlerini .NET istemcisine göstermeden tüketir.
Aşağıdaki görüntüde COM arabirimleri ve çalışma zamanı çağrılabilen sarmalayıcı gösterilmektedir:
Erken bağlanan bir nesne olarak oluşturulduğunda, RCW belirli bir türdür. COM nesnesinin uyguladığı arabirimleri uygular ve nesnenin arabirimlerinden yöntemleri, özellikleri ve olayları kullanıma sunar. Çizimde RCW, INew arabirimini kullanıma sunar ancak IUnknown ve IDispatch arabirimlerini tüketir. Ayrıca RCW, INew arabiriminin tüm üyelerini .NET istemcisine sunar.
RCW, sarmaladığı nesne tarafından kullanıma sunulan aşağıdaki tabloda listelenen arabirimleri tüketir.
Arabirim | Açıklama |
---|---|
Idispatch | Yansıma aracılığıyla COM nesnelerine geç bağlama için. |
Ierrorınfo | Hatanın metinsel açıklamasını, kaynağını, Yardım dosyasını, Yardım bağlamını ve hatayı tanımlayan arabirimin GUID'sini sağlar (.NET sınıfları için her zaman GUID_NULL ). |
IProvideClassInfo | Sarmalanan COM nesnesi IProvideClassInfo uygularsa, RCW daha iyi tür kimliği sağlamak için bu arabirimden tür bilgilerini ayıklar. |
IUnknown | Nesne kimliği için zorlama ve yaşam süresi yönetimi yazın: - Nesne kimliği Çalışma zamanı, her nesne için IUnknown arabiriminin değerini karşılaştırarak COM nesnelerini ayırt eder. - Tür zorlaması RCW, QueryInterface yöntemi tarafından gerçekleştirilen dinamik tür bulma işlemini tanır. - Yaşam süresi yönetimi RcW, QueryInterface yöntemini kullanarak, çalışma zamanı sarmalayıcıda atık toplama işlemi gerçekleştirene kadar yönetilmeyen bir nesneye başvuru alır ve bu da yönetilmeyen nesneyi serbest bırakır. |
RCW isteğe bağlı olarak, kaydırdığı nesne tarafından kullanıma sunulan aşağıdaki tabloda listelenen arabirimleri tüketir.
Arabirim | Açıklama |
---|---|
I Bağlan ionPoint ve I Bağlan ionPointContainer | RCW, bağlantı noktası olay stilini kullanıma sunan nesneleri temsilci tabanlı olaylara dönüştürür. |
IDispatchEx (Yalnızca.NET Framework) | sınıfı IDispatchEx uygularsa, RCW IExpando uygular. IDispatchEx arabirimi, IDispatch'ın aksine üyelerin numaralandırmasını, toplamasını, silinmesini ve büyük/küçük harfe duyarlı çağrısını etkinleştiren IDispatch arabiriminin bir uzantısıdır. |
Ienumvarıant | Numaralandırmaları destekleyen COM türlerinin koleksiyon olarak değerlendirilmesini sağlar. |