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

问题描述:

我已经定义了这样的如何使用C#将IUnknown参数传递给COM接口?

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

一个COM接口,我如何可以通过使用C#IUnknown对象?

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

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

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

假设你不知道什么关于对象,你可能会使用一个IntPtr来表示IUnknown和然后得到一个RCW它使用Marshal.GetUniqueObjectForIUnknown为:

// Get some object 

IntPtr ptrObj = IntPtr.Zero; 


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