Marshal.ReleaseComObject(Object) Yöntem

Tanım

Belirtilen COM nesnesiyle ilişkili Çalışma Zamanı Çağrılabilen Sarmalayıcı (RCW) başvuru sayısını azaltma.

public:
 static int ReleaseComObject(System::Object ^ o);
[System.Security.SecurityCritical]
public static int ReleaseComObject(object o);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static int ReleaseComObject(object o);
public static int ReleaseComObject(object o);
[<System.Security.SecurityCritical>]
static member ReleaseComObject : obj -> int
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member ReleaseComObject : obj -> int
static member ReleaseComObject : obj -> int
Public Shared Function ReleaseComObject (o As Object) As Integer

Parametreler

o
Object

Yayınlanması gereken COM nesnesi.

Döndürülenler

ile oilişkili RCW'nin başvuru sayısının yeni değeri. RCW, çağıran yönetilen istemci sayısından bağımsız olarak sarmalanmış COM nesnesine yalnızca bir başvuru tuttuğundan bu değer genellikle sıfırdır.

Öznitelikler

Özel durumlar

o geçerli bir COM nesnesi değil.

o, null'e eşittir.

Açıklamalar

Bu yöntem, yönetilen koddan kullanılan bir COM nesnesinin ömrünü açıkça denetlemek için kullanılır. Kaynaklara başvuruları zamanında veya nesnelerin belirli bir sırada serbest olması gerektiğinde başvuruları tutan temel COM nesnesini serbest getirmek için bu yöntemi kullanmalısınız.

COM arabirim işaretçisi ortak dil çalışma zamanına (CLR) her girdiğinde, bir RCW içine sarmalanır.

RCW,COM arabirim işaretçisi her eşlendiğinde artırılan bir başvuru sayısına sahiptir. yöntemi bir ReleaseComObject RCW'nin başvuru sayısını azaltmaya devam eder. Başvuru sayısı sıfıra ulaştığında, çalışma zamanı yönetilmeyen COM nesnesinde tüm başvurularını serbest bırakır ve nesneyi daha fazla kullanmaya çalışırsanız bir System.NullReferenceException oluşturur. Aynı COM arabirimi yönetilmeyen koddan yönetilen koda birden fazla kez geçirilirse, sarmalayıcıdaki başvuru sayısı her seferinde artırılır ve çağrılması ReleaseComObject kalan başvuru sayısını döndürür.

Bu yöntem, RCW başvuru sayısı sürümünü istediğiniz zaman tam olarak gerçekleşmesi için zorlamanıza olanak tanır. Ancak hatalı kullanımı uygulamanızın ReleaseComObject başarısız olmasına veya erişim ihlaline neden olabilir.

Bir uygulama etki alanındaki yönetilen kodun, COM bileşenini temsil eden bir RCW'de tutulduğunu düşünün. RCW'de yöntemini çağırırsanız ReleaseComObject , yönetilen kod RCW'ye erişemez ve bir InvalidComObjectException özel durum oluşturur.

RCW yayınlandığında RCW çağrısı yürütülüyorsa daha ciddi bir hata oluşabilir. Bu durumda, çağrıyı yapan iş parçacığının erişim ihlaline neden olma olasılığı yüksektir. Ancak, işlem belleği bozulabilir ve hata ayıklaması çok zor nedenlerle başarısız olana kadar işlem çalışmaya devam edebilir.

Bu risk, kullanılmakta olan COM bileşeni tek bir bileşen olduğunda bileşiktir. Bunun nedeni şudur: CLR, TEK COM bileşenleri için her çağrıldığında aynı arabirim işaretçisini döndüren COM CoCreateInstance işlevini çağırarak COM bileşenlerini etkinleştirir. Bu nedenle, bir uygulama etki alanındaki yönetilen kodun ayrı ve bağımsız parçaları tek bir COM bileşeni için aynı RCW'yi kullanabilir ve biri COM bileşeninde yöntemini çağırırsa ReleaseComObject diğeri bozulur.

Bu nedenle, yalnızca kesinlikle gerekliyse kullanın ReleaseComObject . Bir COM bileşeninin belirlenen zamanda yayınlandığından emin olmak için bu yöntemi çağırmak istiyorsanız, bunun yerine yöntemini kullanmayı FinalReleaseComObject göz önünde bulundurun. FinalReleaseComObject , CLR'yi kaç kez yeniden girdiğine bakılmaksızın temel com bileşenini serbest bırakır. COM bileşeni CLR'yi her yeniden girdiğinde RCW'nin iç başvuru sayısı bir artırılır. Bu nedenle, döndürülen değer sıfır olana kadar bir döngüde yöntemini çağırabilirsiniz ReleaseComObject . Bu yöntemle aynı sonucu elde eder FinalReleaseComObject .

Şunlara uygulanır

Ayrıca bkz.