如何使用C#将IUnknown参数传递给COM接口?

时间:2014-05-12 17:10:51

标签: c# com iunknown com-interface

我有一个像这样定义的COM接口

interface Client : IUnknown
{
    [id(1)] HRESULT GetSomething
    (
        enum SomeID someID,
        [out] IUnknown  **pUnknown
    );
};

如何使用C#传递IUnknown对象?

2 个答案:

答案 0 :(得分:4)

你没有传递任何东西,返回一个接口指针。 IUnknown是一个不透明的接口,由所有COM接口实现。在C#中,它将是 object 类型的对象,“可能是任何东西”的托管版本。所以基本代码如下所示:

object retval;
client.GetSomething(SomeID.Magic, out retval);

然后由您决定将返回的对象强制转换为实际的接口类型,可能基于 Magic 。你的问题没有给出任何暗示,你必须阅读COM组件的文档才能有所了解。

答案 1 :(得分:3)

假设您不知道关于该对象的任何,您可能会使用IntPtr来表示IUnknown,然后使用Marshal.GetUniqueObjectForIUnknown为其获取RCW:

// Get some object

IntPtr ptrObj = IntPtr.Zero;


Client.GetSomething(someID, out ptrObj);
object obj = Marshal.GetUniqueObjectForIUnknown(ptrIProfferService);