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
pUnk
Type: System.IntPtrA interface a ser liberada.
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
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