Aracılığıyla paylaş


Çalışma Zamanında Çağrılabilir Sarmalayıcı

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ı, o nesnede bulunan başvuru sayısına bakılmaksızın 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ı veya dairesinde RCW oluşturur ve sonra başka bir uygulama etki alanına veya dairesine başvuruyu geçirirseniz, ilk nesne için bir proxy kullanılacaktı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 istemciler, INew ve INewer arabirimlerini kullanıma sunan COM nesnelerine referanslar 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:

RCW aracılığıyla COM nesnelerine erişme işlemi.

Ç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 bir RCW, sarmalandığı COM nesnesine ait arabirim işaretçilerinin önbelleğini tutar ve RCW artık gerekli olmadığında referansını COM nesnesinde serbest bırakır. Çalışma zamanı RCW üzerinde çöp toplama gerçekleştirir.

RCW, diğer faaliyetlerin yanı sıra, sarmalanmış nesne adına yönetilen ve yönetilmeyen kodlar arasında verileri yönetir. Özellikle RCW, istemci ve sunucu arasında aktarılan verilerin farklı temsil biçimlerine sahip olduklarında metot bağımsız değişkenleri ve metot dönüş değerleri için sıralama sağlar.

Standart sarmalayıcı, yerleşik veri düzenleme kurallarını uygular. Örneğin, bir .NET istemcisi yönetilmeyen bir nesneye bir bağımsız değişkenin parçası olarak bir string türü geçirirse, sarmalayıcı string öğesini bir BSTR türüne dönüştürür. COM nesnesi yönetilen çağırana bir BSTR döndürürse, çağıran bir stringalı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 bir sarmalayıcı, türü dönüştürmeden her zaman yönetilen ve yönetilmeyen kod arasında 4 baytlık bir tamsayı geçirir.

Seçili arabirimleri düzenleme

Ç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:

Arabirimleri olan çalışma zamanı çağrılabilen sarmalayıcının ekran görüntüsü.

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ığı nesnenin kullanıma sunduğu aşağıdaki tabloda listelenen arabirimleri kullanır.

Arayüz Açıklama
IDispatch Yansıma aracılığıyla COM nesnelerine geç bağlama için.
IErrorInfo 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, tip dönüştürme ve yaşam süresi yönetimi için:

- 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
QueryInterface yöntemini kullanarak, RCW yönetilmeyen bir nesneye başvuru alır ve çalışma zamanı sarmalayıcı üzerinde çöp toplama işlemi gerçekleştirene kadar bu başvuruyu tutar, bu da yönetilmeyen nesnenin serbest bırakılmasını sağlar.

RCW, sarmaladığı nesne tarafından kullanıma sunulan aşağıdaki tabloda listelenen arabirimleri isteğe bağlı olarak tüketir.

Arayüz Açıklama
IConnectionPoint ve IConnectionPointContainer RCW, bağlantı noktası etkinlik stilini kullanan nesneleri temsilci tabanlı etkinliklere 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.
IEnumVARIANT Numaralandırmaları destekleyen COM türlerinin koleksiyon olarak değerlendirilmesini sağlar.

Ayrıca bakınız