Marshal.Release(IntPtr) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Уменьшает счетчик ссылок для указанного интерфейса.
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
Параметры
- pUnk
-
IntPtr
nativeint
Освобождаемый интерфейс.
Возвращаемое значение
Новое значение счетчика ссылок для интерфейса, заданного параметром pUnk
.
- Атрибуты
Примеры
В следующем примере показано, как получить IUnknown
интерфейс для управляемого объекта с помощью GetIUnknownForObject метода . Затем в примере указатель интерфейса освобождается путем вызова Release метода .
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
Комментарии
Среда CLR управляет числом ссылок com-объекта, поэтому использовать этот метод напрямую не требуется. Используйте это значение только для тестирования. В редких случаях, например при тестировании пользовательского маршалера, может потребоваться управлять временем существования объекта вручную. Вызывать должны только программы, вызывающие Marshal.AddRefRelease. Вызов Release после того, как число ссылок достигнет нуля, приводит к неопределенному поведению.
Можно вызвать Marshal.GetComInterfaceForObject, Marshal.GetIUnknownForObjectили Marshal.GetIDispatchForObject , чтобы получить IntPtr значение, представляющее указатель интерфейса IUnknown для освобождения. Вы также можете использовать эти методы и Release метод для управляемых объектов, чтобы освободить интерфейсы COM, представленные вызываемой оболочкой COM управляемого объекта.