Compartilhar via


Método Marshal.Release (IntPtr)

 

Dica

The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.

Diminui a contagem de referência na interface especificada.

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

Sintaxe

[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

Parâmetros

Valor Retornado

Type: System.Int32

O novo valor da contagem de referência na interface especificada pelo parâmetro pUnk.

Comentários

O common language runtime gerencia a contagem de referência de um objeto COM para você, tornando desnecessário usar este método diretamente. Use esse valor apenas para fins de teste. Em casos raros, como testes de um marshaler personalizado, talvez seja necessário para manipular o tempo de vida de um objeto manualmente. Somente programas que chamam Marshal.AddRef devem chamar Release. Chamando Release depois que a contagem de referência atingir zero faz com que um comportamento indefinido.

Você pode chamar Marshal.GetComInterfaceForObject, Marshal.GetIUnknownForObject, ou Marshal.GetIDispatchForObject para obter um IntPtr valor que representa um IUnknown para liberar o ponteiro de interface. Você também pode usar esses métodos e Release método em objetos gerenciados para liberar as interfaces COM representado pelo objeto gerenciado COM Callable Wrapper.

Exemplos

O exemplo a seguir demonstra como recuperar um IUnknown interface para um objeto gerenciado usando o GetIUnknownForObject método. O exemplo, em seguida, libera o ponteiro de interface chamando o Release método.

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

Segurança

SecurityCriticalAttribute

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

Informações de Versão

Plataforma Universal do Windows
Disponível desde 8
.NET Framework
Disponível desde 1.1
Biblioteca de Classes Portátil
Com suporte no: plataformas portáteis do .NET
Windows Phone Silverlight
Disponível desde 8.0
Windows Phone
Disponível desde 8.1

Confira Também

AddRef
QueryInterface
GetComInterfaceForObject
GetIUnknownForObject
GetIDispatchForObject
Classe Marshal
Namespace System.Runtime.InteropServices

Retornar ao início