如何实现 IUnknown

[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayerIMFMediaEngine音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

Microsoft DirectShow 基于组件对象模型 (COM) 。 如果编写自己的筛选器,则必须将其实现为 COM 对象。 DirectShow 基类提供用于执行此操作的框架。 使用基类不是必需的,但它可以简化开发过程。 本文介绍 COM 对象的一些内部详细信息及其在 DirectShow 基类中的实现。

本文假定你知道如何对 COM 客户端应用程序进行编程(换句话说,你了解 IUnknown 中的方法),但并不假定以前开发 COM 对象的经验。 DirectShow 处理开发 COM 对象的许多详细信息。 如果具有开发 COM 对象的经验,应阅读 使用 CUnknown 部分,其中介绍了 CUnknown 基类。

COM 是规范,而不是实现。 它定义组件必须遵循的规则;将这些规则生效留给开发人员。 在 DirectShow 中,所有对象都派生自一组 C++ 基类。 基类构造函数和方法执行大部分 COM“簿记”工作,例如保持一致的引用计数。 通过从基类派生筛选器,可以继承 类的功能。 若要有效地使用基类,需要大致了解基类实现 COM 规范的方式。

本文包含以下主题。

DirectShow 和 COM