Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическая загрузка wmp.dll, Windows Media Player 
:(
    Опции темы
Brain89
Дата 14.6.2011, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 18.1.2010

Репутация: нет
Всего: 2



Здравствуйте. У меня проект, в котором я использую ActiveX-компонент Windows Media Player (wmp.dll). На более раннем этапе я добавил его на форму, используя Tools -> Choose Toolbox Items... и, соответственно, контрол отобразился на toolbox'е. Перетащил на форму, создалось два файла (AxInterop.WMPLib.dll, Interop.WMPLib.dll), и после я нормально работал с контролом. Но сейчас таскать за собой эти файлы не хочется, тем более, что у каждого пользователя, у которого стоит Windows Media Player, есть wmp.dll. Поэтому хотелось бы грузить эту dll'ку динамически во время запуска приложения и, соответственно, также динамически создавать плеер. Но понятия не имею, как это сделатьsmile Пробовал через Assembly.LoadFile(@"C:\Windows\System32\wmp.dll"), но получаю ошибку, что не найден файл сборки. Вообщем, может кто-то уже проделывал такой трюк? И может мне подсказать? Или хотя бы сказать, в каком направлении рыть. Заранее спасибо.
PM   Вверх
jonie
Дата 14.6.2011, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



его самому грузить не надо - за это для вас сделаем COM подсистема.
Для того чтобы использовать динамические интерфейсы можно использовать dynamic [http://msdn.microsoft.com/en-us/library/dd264736.aspx]

т.е. вам надо сначала создать экземпляр класса, потом создать экземпляр, потом заюзать dynamic.
Код

Type oType = Type.GetTypeFromProgID (sProgID);
dynamic object = Activator.CreateInstance(oType);
object.SomeIDispatchMethod()...


Если интересна "магия", то начать стоит чтение с IDispatch.
Если вы работает с .NET Fx<4.0, тогда вам надо будет руками это производить  (обращаясь как раз через IDispatch) Пример: http://stackoverflow.com/questions/403218/...ch-late-binding

Это сообщение отредактировал(а) jonie - 14.6.2011, 15:37


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Voyager
Дата 14.6.2011, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 3
Всего: 18



С приложением достаточно распростарнять AxInterop.WMPLib.dll, Interop.WMPLib.dll. Остальное подхватится само.
PM   Вверх
Brain89
Дата 15.6.2011, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 18.1.2010

Репутация: нет
Всего: 2



2jonie
Что-то про Activator я забыл. Спасибо. Так вполне COM-объект создается:
Код

Object player = Activator.CreateInstance(Type.GetTypeFromProgID("WMPlayer.OCX"));

А через InvokeMember доступ к свойствам я получил:
Код

player.GetType().InvokeMember("URL", BindingFlags.SetProperty, null, player, objArgs);

Вот только как отобразить теперь его на форме? Т.е. проект я запускаю, где-то на фоне звук есть, а вот как отобразить объект как контрол на форме - я не понимаю. У этого плеера нет такого свойства "UserControl", как в примере.

2Voyager
В том-то и задача, чтобы не таскать эти файлы с собой. Ведь создаются они из wmp.dll, которая, в принципе, есть у пользователя. Да и добавить их в инсталлятор не получиться - они защищены Microsoft:)
PM   Вверх
jonie
Дата 15.6.2011, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



Brain89, вообще говоря в .NET 4 (точнее говоря в VS2010) появилась вохможность указать что тебе надо isolated com  - это в свойствах reference-а -- тогда информацию о типах система включит сама в главную сборку, не делая интеропов.



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Brain89
Дата 15.6.2011, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 18.1.2010

Репутация: нет
Всего: 2



2jonie
Первый раз о таком слышуsmile А где конкретно можно указать это свойство?
PM   Вверх
jonie
Дата 15.6.2011, 19:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



user posted image


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.2139 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.