Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как получить IWMPSyncServices в C#


Автор: HalkaR 21.2.2006, 19:45
В Windows Media Player SDK получение интерфейса IWMPSyncServices делается так:
Код

m_spPlayer->QueryInterface(&spSyncServices); 
Но как тоже самое сделать на C#?
Я пробовал
Код

IWMPSyncServices ss = (IWMPSyncServices)Player;
Но ss становится null.
Что делать?
Спасибо!

Автор: mr.DUDA 21.2.2006, 23:26
Ничего не понятно smile

Автор: HalkaR 21.2.2006, 23:51
Вопрос простой - откуда получить интерфейс IWMPSyncServices.

Автор: mr.DUDA 22.2.2006, 16:08
А что за класс Player (или это свойство ?)
Нужно в студии (в крайнем случае, в отладке) смотреть тип Player'а, и можно ли его приводить к интерфейсу IWMPSyncServices. Вообще, обычно работа с COM в .NET производится через врапперы - interop'ы, создаваемые по "Add Reference..." на COM-компонент, и никакой речи о QueryInterface не идёт, а получить интерфейс можно создав экземпляр типа с аналогичным именем (как например в Word-е: new Word.ApplicationClass() возвращает объект, от которого можно получить всё остальное). Не знаю, что там особенного в Media Player'е, с ним не работал...

Автор: HalkaR 3.3.2006, 14:48
В хэлпе написанно
Цитата

Retrieve a pointer to IWMPSyncServices by calling QueryInterface through IWMPPlayer.

Я делаю так
Код

            WindowsMediaPlayerClass wmp = new WindowsMediaPlayerClass();
            IWMPPlayer p = (IWMPPlayer)wmp;
            IWMPSyncServices ss = p as IWMPSyncServices;

однакоже ss = null

Автор: mr.DUDA 3.3.2006, 19:30
Код

IWMPPlayer p = (IWMPPlayer)wmp;
IWMPSyncServices ss = p as IWMPSyncServices;

Чушь. Приводишь один и тот же объект к двум разным типам. Конечно, если IWMPPlayer и IWMPSyncServices - разные интерфейсы, то ничего не получится. Это то же самое что просто написать:
Код

IWMPSyncServices ss = (IWMPSyncServices)(IWMPPlayer)wmp;

Всё что нужно на самом деле сделать - это найти у IWMPPlayer метод или свойство, возвращающее ссылку на объект с типом IWMPSyncServices.

Автор: HalkaR 3.3.2006, 22:04
Цитата(mr.DUDA @ 3.3.2006, 19:30)
Код

IWMPPlayer p = (IWMPPlayer)wmp;
IWMPSyncServices ss = p as IWMPSyncServices;

Чушь. Приводишь один и тот же объект к двум разным типам. Конечно, если IWMPPlayer и IWMPSyncServices - разные интерфейсы, то ничего не получится. Это то же самое что просто написать:
Код

IWMPSyncServices ss = (IWMPSyncServices)(IWMPPlayer)wmp;

1. Я просто хотел показать откуда что берется. Просто в SDK написано что IWMPSyncServices берется из IWMPPlayer вот я и показал откуда что пытаюсь брать.
Цитата

Всё что нужно на самом деле сделать - это найти у IWMPPlayer метод или свойство, возвращающее ссылку на объект с типом IWMPSyncServices.

2. Вот это я и не знаю откуда найти

Автор: mr.DUDA 3.3.2006, 23:59
Что-то я нигде не нашёл интерфейса IWMPSyncServices smile
Хотя подключил обе библиотеки, добавляющие неймспейс MediaPlayer и WMPLib...

Автор: HalkaR 5.3.2006, 12:49
Вот именно, я уже неделю долбаю, а нету - в хэлпе есть, а на деле нет. Правда вроде это проблема майкрасофта. Так что щас пишу модуль на С++.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)