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 istemcilerin sayısından bağımsız olarak sarmalanan COM nesnesine tek 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 kalmasını sağlamak 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ı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 kullanmayı denerseniz 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, rcw başvuru sayısı yayınını zorlamanıza olanak tanır, böylece tam olarak istediğiniz zaman gerçekleşir. Ancak uygulamasının ReleaseComObject yanlış kullanılması uygulamanızın 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 tutıldığı bir senaryo 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 birleşir: 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 ayrı ve bağımsız yönetilen kod 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'ye 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 yöntemini döngüde çağırabilirsiniz ReleaseComObject . Bu yöntemle aynı sonucu elde eder FinalReleaseComObject .

Şunlara uygulanır

Ayrıca bkz.