Marshal.Release(IntPtr) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
递减指定接口上的引用计数。
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.GetComInterfaceForObject、 Marshal.GetIUnknownForObject或 Marshal.GetIDispatchForObject 来获取一个 IntPtr 值,该值表示要释放的 IUnknown 接口指针。 还可以使用这些方法和 Release 托管对象上的 方法来释放由托管对象的 COM 可调用包装器表示的 COM 接口。