6

我一直在寻找如何在 C# 中实现IUnknown的示例,但没有找到任何合适的参考或解决方案。

是不是应该这么简单...

public interface IUnknown
{
    UInt32 AddRef();
    UInt32 QueryInterface([In] IntPtr riid, [Out] IntPtr ppvObject);
    UInt32 Release();
}

...或者还有更多吗?

4

3 回答 3

7

为什么要实现 IUnknown?那是一个COM接口。如果您想与 COM 互操作,请使用为您实现 IUnknown 的 .Net/COM 桥。

于 2013-05-23T13:48:19.893 回答
4
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface ISomeInterface
{
   ...
}

此属性执行 ISomeInterface : IUnknown { ... }

于 2015-11-19T11:48:46.280 回答
1

被问到:{ ...只是出于兴趣,Direct2D接口,ID2D1Factory继承自IUnknown,所以大概我仍然需要用.NET实现这个接口......我不确定我会在这里做什么。— — series0ne 13 年 5 月 24 日在 8:51 ... } 答案是否定的。从 IUnknown 派生类的全部意义在于,您的类不必实现 IUknown 为您所做的任何事情。它将自动处理诸如 QueryInterface 和 AddRefCount 之类的事情。你甚至不用 C# 或 C++ 做任何事情。在 C++ 中是 CoCreateInstance(),在 C# 中是 Activator.CreateInstance()。

于 2016-03-13T18:26:11.803 回答