Marshal.Release-Methode: (IntPtr)

 

Veröffentlicht: Oktober 2016

Dekrementiert den Verweiszähler für die angegebene Schnittstelle.

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

Syntax

[SecurityCriticalAttribute]
public static int Release(
    IntPtr pUnk
)
public:
[SecurityCriticalAttribute]
static int Release(
    IntPtr pUnk
)
[<SecurityCriticalAttribute>]
static member Release : 
        pUnk:nativeint -> int
<SecurityCriticalAttribute>
Public Shared Function Release (
    pUnk As IntPtr
) As Integer

Parameter

Rückgabewert

Type: System.Int32

Der neue Wert des Verweiszählers für die Schnittstelle, die durch den pUnk-Parameter angegeben ist.

Hinweise

Die common Language Runtime verwaltet den Verweiszähler eines COM-Objekts für Sie, sodass es nicht erforderlich, diese Methode direkt verwenden. Verwenden Sie diesen Wert nur für Testzwecke. In seltenen Fällen, beispielsweise bei einen benutzerdefinierten Marshaller Tests, möglicherweise finden Sie es erforderlich, die Lebensdauer eines Objekts manuell zu bearbeiten. Dieser Aufruf nur Programme Marshal.AddRef sollten Aufrufen Release. Aufrufen von Release nach der Verweiszähler erreicht 0 (null) bewirkt, dass nicht definiertes Verhalten.

Rufen Sie Marshal.GetComInterfaceForObject, Marshal.GetIUnknownForObject, oder Marshal.GetIDispatchForObject zum Abrufen einer IntPtr -Wert, der darstellt, ein IUnknown -Schnittstellenzeiger. Sie können diese Methoden auch verwenden und die Release Methode für verwaltete Objekte, die COM-Schnittstellen, die durch des verwalteten Objekts dargestellte freizugeben COM Callable Wrapper.

Beispiele

Das folgende Beispiel veranschaulicht das Abrufen einer IUnknown Schnittstelle für ein verwaltetes Objekt mit der GetIUnknownForObject Methode. Das Beispiel gibt dann den Schnittstellenzeiger frei, durch Aufrufen der Release Methode.

using System;
using System.Runtime.InteropServices;

class Program
{

    static void Run()
    {

        // Create an int object
        int obj = 1;

        Console.WriteLine("Calling Marshal.GetIUnknownForObject...");

        // Get the IUnKnown pointer for the Integer object
        IntPtr pointer = Marshal.GetIUnknownForObject(obj);

        Console.WriteLine("Calling Marshal.Release...");

        // Always call Marshal.Release to decrement the reference count.
        Marshal.Release(pointer);
    }

    static void Main(string[] args)
    {
        Run();
    }
}
Imports System.Runtime.InteropServices

Module Program


    Sub Run()

        ' Dim an Integer object
        Dim IntegerObject As Integer = 1

        ' Dim a pointer
        Dim pointer As IntPtr

        Console.WriteLine("Calling Marshal.GetIUnknownForObject...")

        ' Get the IUnKnown pointer for the Integer object
        pointer = Marshal.GetIUnknownForObject(IntegerObject)

        Console.WriteLine("Calling Marshal.Release...")

        ' Always call Marshal.Release to decrement the reference count.
        Marshal.Release(pointer)



    End Sub

    Sub Main(ByVal args() As String)

        Run()

    End Sub

End Module

Sicherheit

SecurityCriticalAttribute

requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

Versionsinformationen

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Windows Phone Silverlight
Verfügbar seit 8.0
Windows Phone
Verfügbar seit 8.1

Siehe auch

AddRef
QueryInterface
GetComInterfaceForObject
GetIUnknownForObject
GetIDispatchForObject
Marshal-Klasse
System.Runtime.InteropServices-Namespace

Zurück zum Anfang