![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Directshow по русски
Леха © (2013-08-13 00:11:00)Здравствуйте! Ну скажите же мне... Читаю директшоу по русски.
почему IGraphBuilder создаетсяCoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC, IID_IGraphBuilder,pGraphBuilder);
а IMediaControl так не создается а еще и запрашивается IGraphBuilderpGraphBuilder.QueryInterface(IID_IMediaControl, pMediaControl);. В чем же их разница и смысл. Как узнать какой интерфейс как получать?
Леха (2013-08-13 16:20:00) [1]Ну если так , то крайне понятно и огромное спасибо!!!
ProgRAMmer Dimonych (2013-08-13 13:57:00) [2]> [2] Леха (13.08.13 06:41)
Да, вполне взаимозаменяемо, главное не напутать с тем, куда указатель на какой интерфейс идёт. Но я бы всё-таки рекомендовал следовать документации, на всякий случай: для стандартных классов может прокатить, а какой-нибудь сторонний окажется реализованным так, что будет зависеть от порядка выбора интерфейсов (что вряд ли, конечно, но исключать нельзя).
Леха (2013-08-13 06:41:00) [3]то есть можно для начала
CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC, IID_IMediaControl,pMediaControl);а потом ужеpMediaControl.QueryInterface(IID_IpGraphBuilder, pGraphBuilder);так получается?
ProgRAMmer Dimonych (2013-08-13 01:36:00) [4]Один и тот же класс реализует несколько интерфейсов. CoCreateInstance() создаёт экземпляр класса (какого — определяет первый параметр, CLSID_FilterGraph) и возвращает указатель на интерфейс (интерфейс — по сути таблица указателей на методы), заданный четвёртым параметром (IID_IGraphBuilder). Результат: через pGraphBuilder можно вызывать методы для построения графа фильтров.
Чтобы получить другой интерфейс, реализованный тем же объектом, вызывается его метод QueryInterface() с указанием того, какой интерфейс нужен (IID_IMediaControl). Результат: через pMediaControl можно обращаться к другим методам того же объекта.
Как понять, какие интерфейсы реализуются какими классами? Читать документацию. Для стандартных информация есть.