Соглашения Reference-Counting для объектов COM

Методы в звуковых интерфейсах следуют общему набору правил для подсчета ссылок на COM-объекты, которые они принимают в качестве входных параметров или возвращают в качестве выходных параметров. Эти правила и их исключения приведены ниже. Дополнительные сведения о COM-интерфейсах см. в разделе COM документации по Microsoft Windows SDK.

Подсчет ссылок на входные параметры

При вызове метода, который принимает ссылку на объект 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.