соглашения Reference-Counting для COM-объектов
Методы в звуковых интерфейсах соответствуют общему набору правил подсчета ссылок на COM-объекты, которые они принимают в качестве входных параметров или возвращаются в качестве выходных параметров. Эти правила и их исключения приведены ниже. Дополнительные сведения о COM-интерфейсах см. в разделе COM документации по пакету SDK для Microsoft Windows.
подсчет ссылок на входные параметры
При вызове метода, который принимает ссылку на объект X в качестве входного параметра, вызывающий объект должен удерживать собственную ссылку на объект на время вызова. Это поведение необходимо для обеспечения того, чтобы указатель метода на объект X остается допустимым, пока он не возвращается. Если объект Y, реализующий этот метод, должен содержать ссылку на объект X за пределами возвращаемого метода, метод должен вызывать AddRef для объекта X перед возвратом. Когда объект Y позже завершает использование объекта X, он должен вызывать Release на объекте X.
Например, метод IServiceGroup::AddMember вызывает AddRef на объекте IServiceSink, который он добавляет в свою группу служб. Чтобы дополнить это поведение, метод IServiceGroup::RemoveMember вызывает Release на объекте IServiceSink, который удаляется из группы служб.
Ссылочное подсчет выходных параметров
Метод, который передает ссылку на объект вызывающему объекту через выходной параметр, должен вызывать AddRef в объекте перед возвратом (или перед выпуском собственной ссылки на объект). Это поведение необходимо для того, чтобы вызывающая сторона имела действительную ссылку при возвращении из вызова. Вызывающий объект отвечает за вызов release в объекте после завершения его использования.
Например, метод IMiniportWaveCyclic::NewStream вызывает AddRef в потоке, группе служб и объектах канала DMA, которые он выводит вызывающему объекту (драйвер порта WaveCyclic). Вызывающая сторона обязана освободить эти ссылки, когда они больше не нужны. Чтобы ознакомиться с реализацией метода IMiniportWaveCyclic::NewStream, демонстрирующего это поведение, см. пример адаптера Sb16 в более ранних версиях комплекта драйверов Microsoft Windows (WDK).
исключения правил
Для описания неконвенционного подсчета ссылок, который этот метод выполняет для его выходного параметра DmaChannel, см. в разделе IMiniportWavePci::NewStream.