Marshal.GetIUnknownForObject(Object) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
从托管对象返回 IUnknown 接口。
public:
static IntPtr GetIUnknownForObject(System::Object ^ o);
[System.Security.SecurityCritical]
public static IntPtr GetIUnknownForObject (object o);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static IntPtr GetIUnknownForObject (object o);
public static IntPtr GetIUnknownForObject (object o);
[<System.Security.SecurityCritical>]
static member GetIUnknownForObject : obj -> nativeint
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member GetIUnknownForObject : obj -> nativeint
static member GetIUnknownForObject : obj -> nativeint
Public Shared Function GetIUnknownForObject (o As Object) As IntPtr
参数
- o
- Object
其 IUnknown
接口被请求的对象。
返回
-
IntPtr
nativeint
o
参数的 IUnknown
指针。
- 属性
示例
以下示例演示如何使用GetIUnknownForObject该方法检索托管对象的 IUnknown 接口。
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
注解
在托管代码中,很少直接使用 IUnknown
接口。 但是, GetIUnknownForObject 在调用公开 COM 对象参数作为 IntPtr 类型或自定义封送的方法时非常有用。 使用此方法调用对象会导致引用计数在返回指针之前在接口指针上递增。 使用指针完成后,始终使用 Marshal.Release 递减引用计数。 此方法提供方法的 Marshal.GetObjectForIUnknown 相反功能。
还可以对托管对象使用此方法来获取指向对象的 COM 可调用包装器的 接口指针。