COM 对象的引用计数约定

音频接口中的方法遵循一组常规规则,用于对作为输入参数或作为输出参数返回的 COM 对象的引用进行计数。 下面汇总了这些规则及其例外。 有关 COM 接口的详细信息,请参阅 Microsoft Windows SDK 文档的 COM 部分。

输入参数的引用计数

当调用采用对对象 X 的引用作为输入参数的方法时,调用方必须在调用期间在对象上保留自己的引用。 此行为是必需的,以确保方法指向对象 X 的指针在返回之前保持有效。 如果实现此方法的对象 Y 需要保留对对象 X 的引用,则该方法应在返回前对对象 X 调用 AddRef。 当对象 Y 稍后使用对象 X 完成时,它应对对象 X 调用 Release

例如,IServiceGroup::AddMember 方法在添加到其服务组的 IServiceSink 对象上调用 AddRef。 为了补充此行为,IServiceGroup::RemoveMember 方法对从服务组中移除的 IServiceSink 对象调用 Release

输出参数的引用计数

通过输出参数传递对调用方的对象引用的方法应在对象返回之前(或在释放对对象的自己的引用之前)调用 AddRef 此行为是必需的,以确保调用方在从调用返回时保留有效的引用。 调用方负责在对象使用完该对象后对对象调用 Release

例如,IMiniportWaveCyclic::NewStream 方法在流、服务组和 DMA 通道对象上调用 AddRef,该对象输出到调用方(WaveCyclic 端口驱动程序)。 调用方负责在不再需要这些引用时释放这些引用。 有关显示此行为的 IMiniportWaveCyclic::NewStream 方法的实现,请参阅早期版本的 Microsoft Windows 驱动程序工具包(WDK)中的 Sb16 示例适配器。

规则例外

有关此方法对其 DmaChannel 输出参数执行的非常规引用计数的说明,请参阅 IMiniportWavePci::NewStream