Поделиться через


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 управляемого объекта.

Применяется к

См. также раздел