我有一个像这样定义的COM接口
interface Client : IUnknown
{
[id(1)] HRESULT GetSomething
(
enum SomeID someID,
[out] IUnknown **pUnknown
);
};
如何使用c#传递IUnknown
对象?
你没有传递任何东西,它返回一个接口指针。IUnknown是一个不透明的接口,由所有COM接口实现。在c#中,它将是一个object类型的对象,托管版本的"可以是任何东西"。基本代码是这样的:
object retval;
client.GetSomething(SomeID.Magic, out retval);
然后由您决定将返回的对象强制转换为实际的接口类型,可能基于Magic。你的问题根本没有暗示它可能是什么,你必须阅读COM组件的文档才能有一个想法。
假设您不知道关于对象的任何,您可能会使用IntPtr来表示IUnknown,然后使用Marshal为它获取RCW。GetUniqueObjectForIUnknown:
// Get some object
IntPtr ptrObj = IntPtr.Zero;
Client.GetSomething(someID, out ptrObj);
object obj = Marshal.GetUniqueObjectForIUnknown(ptrIProfferService);