1

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

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

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

4

2 回答 2

4

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

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

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

于 2014-05-13T00:03:53.830 回答
3

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

// Get some object

IntPtr ptrObj = IntPtr.Zero;


Client.GetSomething(someID, out ptrObj);
object obj = Marshal.GetUniqueObjectForIUnknown(ptrIProfferService);
于 2014-05-12T23:31:59.590 回答