Marshal.Release(IntPtr) Metoda

Definice

Sníží počet odkazů na zadaném rozhraní.Decrements the reference count on the specified interface.

public:
 static int Release(IntPtr pUnk);
[System.Security.SecurityCritical]
public static int Release (IntPtr pUnk);
static member Release : nativeint -> int
Public Shared Function Release (pUnk As IntPtr) As Integer

Parametry

pUnk
IntPtr

Rozhraní, které se má uvolnitThe interface to release.

Návraty

Nová hodnota počtu odkazů na rozhraní určeném parametrem pUnk.The new value of the reference count on the interface specified by the pUnk parameter.

Atributy

Příklady

Následující příklad ukazuje, jak načíst rozhraní IUnknown pro spravovaný objekt pomocí metody GetIUnknownForObject.The following example demonstrates how to retrieve an IUnknown interface for a managed object using the GetIUnknownForObject method. Příklad uvolní ukazatel rozhraní voláním metody Release.The example then releases the interface pointer by calling the Release method.

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


Poznámky

Modul CLR (Common Language Runtime) spravuje počet odkazů objektu COM za vás, takže není nutné tuto metodu používat přímo.The common language runtime manages the reference count of a COM object for you, making it unnecessary to use this method directly. Tuto hodnotu použijte pouze pro účely testování.Use this value only for testing purposes. Ve výjimečných případech, jako je například testování vlastního zařazovacího modulu, může být nutné ručně manipulovat s životností objektu.In rare cases, such as testing a custom marshaler, you might find it necessary to manipulate an object's lifetime manually. Releaseby měly volat pouze programy, které volají Marshal.AddRef volání.Only programs that call Marshal.AddRef should call Release. Volání Release po dosažení počtu odkazů s hodnotou nula způsobí nedefinované chování.Calling Release after the reference count has reached zero causes undefined behavior.

Můžete volat Marshal.GetComInterfaceForObject, Marshal.GetIUnknownForObjectnebo Marshal.GetIDispatchForObject k získání hodnoty IntPtr, která představuje ukazatel rozhraní IUnknown na vydanou verzi.You can call Marshal.GetComInterfaceForObject, Marshal.GetIUnknownForObject, or Marshal.GetIDispatchForObject to obtain an IntPtr value that represents a IUnknown interface pointer to release. Tyto metody a metodu Release pro spravované objekty lze použít také k uvolnění rozhraní COM reprezentovaných obálkou s voláním spravovaného objektu modelu COM.You can also use these methods and the Release method on managed objects to release the COM interfaces represented by the managed object's COM Callable Wrapper.

Zabezpečení

SecurityCriticalAttribute
vyžaduje úplný vztah důvěryhodnosti pro bezprostředně volajícího.requires full trust for the immediate caller. Tohoto člena nelze použít v kódu s částečnou důvěryhodností ani v transparentním kódu.This member cannot be used by partially trusted or transparent code.

Platí pro

Viz také