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 参数指定的接口上的新引用计数值。

属性

示例

以下示例演示如何使用 GetIUnknownForObject 方法检索IUnknown托管对象的接口。 然后,该示例通过调用 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

注解

公共语言运行时为你管理 COM 对象的引用计数,因此不需要直接使用此方法。 此值仅用于测试目的。 在极少数情况下(例如测试自定义封送处理程序),你可能会发现需要手动操作对象的生存期。 只有调用 Marshal.AddRef 的程序才应调用 Release。 在引用计数达到零后调用 Release 会导致未定义的行为。

可以调用 Marshal.GetComInterfaceForObjectMarshal.GetIUnknownForObjectMarshal.GetIDispatchForObject 来获取一个 IntPtr 值,该值表示要释放的 IUnknown 接口指针。 还可以使用这些方法和 Release 托管对象上的 方法来释放由托管对象的 COM 可调用包装器表示的 COM 接口。

适用于

另请参阅