Marshal.Release(IntPtr) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Dekrementiert den Verweiszähler für die angegebene Schnittstelle.
public:
static int Release(IntPtr pUnk);
[System.Security.SecurityCritical]
public static int Release (IntPtr pUnk);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static int Release (IntPtr pUnk);
public static int Release (IntPtr pUnk);
[<System.Security.SecurityCritical>]
static member Release : nativeint -> int
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member Release : nativeint -> int
static member Release : nativeint -> int
Public Shared Function Release (pUnk As IntPtr) As Integer
Parameter
- pUnk
-
IntPtr
nativeint
Die freizugebende Schnittstelle.
Gibt zurück
Der neue Wert des Verweiszählers für die Schnittstelle, die durch den pUnk
-Parameter angegeben ist.
- Attribute
Beispiele
Im folgenden Beispiel wird veranschaulicht, wie eine IUnknown
Schnittstelle für ein verwaltetes Objekt mithilfe der GetIUnknownForObject -Methode abgerufen wird. Das Beispiel gibt dann den Schnittstellenzeiger durch Aufrufen der Release -Methode frei.
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
Hinweise
Die Common Language Runtime verwaltet die Verweisanzahl eines COM-Objekts für Sie, sodass es nicht erforderlich ist, diese Methode direkt zu verwenden. Verwenden Sie diesen Wert nur zu Testzwecken. In seltenen Fällen, z. B. beim Testen eines benutzerdefinierten Marshallers, ist es möglicherweise erforderlich, die Lebensdauer eines Objekts manuell zu bearbeiten. Nur Programme, die aufrufen Marshal.AddRef , sollten aufrufen Release. Das Aufrufen Release , nachdem die Verweisanzahl 0 (null) erreicht wurde, führt zu undefiniertem Verhalten.
Sie können , Marshal.GetIUnknownForObjectoder Marshal.GetIDispatchForObject aufrufenMarshal.GetComInterfaceForObject, um einen IntPtr Wert abzurufen, der einen IUnknown-Schnittstellenzeiger für die Freigabe darstellt. Sie können diese Methoden und die Release -Methode auch für verwaltete Objekte verwenden, um die COM-Schnittstellen freizugeben, die durch den COM Callable Wrapper des verwalteten Objekts dargestellt werden.