如何使用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);