(0) exportieren Drucken
Alle erweitern
Erweitern Minimieren
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Marshal.ReleaseComObject-Methode

Dekrementiert den Verweiszähler des dem angegebenen COM-Objekt zugeordneten angegebenen Runtime Callable Wrapper (RCW) (RCW).

Namespace:  System.Runtime.InteropServices
Assembly:  mscorlib (in mscorlib.dll)

public static int ReleaseComObject(
	Object o
)

Parameter

o
Typ: System.Object
Das freizugebende COM-Objekt.

Rückgabewert

Typ: System.Int32
Der neue Wert für den Verweiszähler des RCW, der o zugeordnet ist. Dieser Wert ist in der Regel 0, da der RCW unabhängig von der Anzahl der aufrufenden verwalteten Clients genau einen Verweis auf das umschlossene COM-Objekt beibehält.

AusnahmeBedingung
ArgumentException

o ist kein gültiges COM-Objekt.

NullReferenceException

o ist null.

Mit dieser Methode wird die Lebensdauer eines von verwaltetem Code verwendeten COM-Objekts explizit gesteuert. Verwenden Sie diese Methode, um das zugrunde liegende COM-Objekt mit den Verweisen auf Ressourcen zum gegebenen Zeitpunkt freizugeben, oder wenn Objekte in einer bestimmten Reihenfolge freigegeben werden müssen.

Bei jedem Eintritt eines COM-Schnittstellenzeigers in die Common Runtime Language (CLR) wird dieser mit einem RCW umschlossen.

Der RCW besitzt einen Verweiszähler, der immer dann inkrementiert wird, wenn ihm ein COM-Schnittstellenzeiger zugeordnet wird. Die ReleaseComObject-Methode dekrementiert den Verweiszähler eines RCW. Wenn der Verweiszähler 0 (null) erreicht, gibt die Laufzeit alle Verweise auf das nicht verwaltete COM-Objekt frei und löst eine System.NullReferenceException aus, wenn ein Versuch unternommen wird, das Objekt weiter zu verwenden. Wenn dieselbe COM-Schnittstelle mehrmals aus nicht verwaltetem an verwalteten Code übergeben wird, wird der Verweiszähler für den Wrapper jedes Mal inkrementiert, und beim Aufrufen von ReleaseComObject wird die Anzahl der verbleibenden Verweise zurückgegeben.

Diese Methode ermöglicht es Ihnen, das Freigeben eines RCW-Verweiszählers zu erzwingen, damit dies genau zum gewünschten Zeitpunkt erfolgt. Die falsche Verwendung von ReleaseComObject kann jedoch zum Scheitern der Anwendung führen oder zu einer Zugriffsverletzung.

Erwägen Sie ein Szenario, in dem er verwaltete Code in einer Anwendungsdomäne einen RCW beibehält, der eine COM-Komponente darstellt. Wenn Sie die ReleaseComObject-Methode auf dem RCW aufrufen, kann der verwaltete Code nicht auf den RCW zugreifen und es wird eine InvalidComObjectException-Ausnahme ausgelöst.

Ein ernsterer Fehler tritt möglicherweise auf, wenn ein RCW-Aufruf bei der RCW-Freigabe ausgeführt wird. In diesem Fall gibt es eine gute Chance, dass der Thread, der den Aufruf durchführt, eine Zugriffsverletzung verursacht. Der Prozessarbeitsspeicher kann jedoch beschädigt werden, und der Prozess wird möglicherweise weiterhin ausgeführt, bis er aus Gründen fehlschlägt, die sehr schwierig sind, zu debuggen.

Dieses Risiko wird verstärkt, wenn die COM-Komponente, die verwendet wird, ein Singleton ist, und aus dem folgenden Grund: Die CLR aktiviert COM-Komponenten, indem sie die COM-CoCreateInstance-Funktion aufruft, die jedes Mal den gleichen Schnittstellenzeiger zurückgibt, wenn sie für Singleton-COM-Komponenten aufgerufen wird. Separate und unabhängige Stücke verwalteten Codes in einer Anwendungsdomäne können daher den gleichen RCW für eine Singleton-COM-Komponente verwenden, und wenn eines von beiden die ReleaseComObject-Methode für die COM-Komponente aufruft, wird das andere unterbrochen.

Verwenden Sie das ReleaseComObject daher nur, wenn es absolut erforderlich ist. Wenn Sie diese Methode aufrufen möchten, um sicherzustellen, dass eine COM-Komponente zu einem bestimmten Zeitpunkt freigegeben wird, erwägen Sie stattdessen die Verwendung der FinalReleaseComObject-Methode. FinalReleaseComObject gibt die zugrunde liegende COM-Komponente frei, unabhängig davon, wie häufig es die CLR erneut eingegeben hat. Die Interne Verweisanzahl des RCW wird jedes Mal inkrementiert, wenn die COM-Komponente erneut in die CLR eintritt. Daher könnten Sie die ReleaseComObject-Methode in einer Schleife aufrufen, bis der zurückgegebene Wert 0 (null) ist. Damit wird das gleiche Ergebnis erzielt wie mit der FinalReleaseComObject-Methode.

.NET Framework

Unterstützt in: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

  • SecurityCriticalAttribute 

    Erfordert volle Vertrauenswürdigkeit für den unmittelbaren Aufrufer. Dieser Member kann von teilweise vertrauenswürdigem oder transparentem Code nicht verwendet werden.

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

Es werden nicht alle Versionen sämtlicher Plattformen von .NET Framework unterstützt.. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft