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