Aracılığıyla paylaş


Marshal.ReleaseComObject(Object) Yöntem

Tanım

Belirtilen COM nesnesiyle ilişkili Çalışma Zamanı Çağrılabilen Sarmalayıcı'nın (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 sarmalanan 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 değeridir.

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 tutan temel alınan COM nesnesini veya nesnelerin belirli bir sırada serbest olması gerektiğinde 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ımına sahiptir. yöntemi, ReleaseComObject bir 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 çok 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 bir RCW başvuru sayısı yayınını zorlamanızı sağlar, böylece istediğiniz zaman tam olarak gerçekleşir. Ancak, hatalı kullanımı uygulamanızın ReleaseComObject başarısız olmasına neden olabilir 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 serbest bırakıldığı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 olan nedenlerle başarısız olana kadar işlem çalışmaya devam edebilir.

Kullanılmakta olan COM bileşeni tekil olduğunda bu risk, şu nedenle bileşiktir: CLR, tekil 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.