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 可调用包装器的 接口指针。

适用于

另请参阅