Share via


Marshal.GetIUnknownForObject(Object) 方法

定义

从托管对象返回 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 可调用包装器的 接口指针。

适用于

另请参阅