Re: Учет ссылок на объекты COM в коде DirectShow
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 03.08.19 21:23
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

EМ>Или там с этим все идеально


Таки увы, там с этим все очень плохо. Выяснилось, что quartz.dll в одних местах проверяет результат QueryInterface, а других проверяет вместо этого адрес интерфейса в переменной. Строго говоря, это допустимо (по правилам COM, при ошибках в переменную должен записываться нуль), но это не дает возможности идентифицировать и обращения по нулевым адресам после тех запросов, где он не проверяет ничего. Честно записываешь нуль — он лезет из разных мест кода по нулевому адресу, записываешь уникальный недоступный адрес для любого отсутствующего интерфейса — начинает лезть по ним и из других мест, поскольку адреса ненулевые. Приходится последовательно менять возврат нуля на возврат недоступного адреса для отдельных интерфейсов, чтобы поймать очевидные косяки.

Такая хрень наблюдается от семерки до десятки 1903 (более новой десятки под рукой нет).

Получается, что MS, предложив свои Base Classes для DirectShow (которых я у себя не использую), спрятал за ними кривую реализацию документированных интерфейсов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.