【问题标题】:How to pass IUnknown argument to a COM interface using C#?如何使用 C# 将 IUnknown 参数传递给 COM 接口?
【发布时间】:2014-05-12 17:10:51
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# com iunknown com-interface


    【解决方案1】:

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

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

    然后由您将返回的对象转换为实际的接口类型,可能基于 Magic。你的问题根本没有暗示它可能是什么,你必须阅读 COM 组件的文档才能有一个想法。

    【讨论】:

      【解决方案2】:

      假设您对对象一无所知任何事情,您可能会使用 IntPtr 来表示 IUnknown,然后使用 Marshal.GetUniqueObjectForIUnknown 为其获取 RCW:

      // Get some object
      
      IntPtr ptrObj = IntPtr.Zero;
      
      
      Client.GetSomething(someID, out ptrObj);
      object obj = Marshal.GetUniqueObjectForIUnknown(ptrIProfferService);
      

      【讨论】:

        猜你喜欢
        • 2012-08-29
        • 2015-10-13
        • 1970-01-01
        • 2012-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-10
        相关资源
        最近更新 更多