![]() |
|
|
![]()
|
|
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
IMoniker объекта позволяет получить FriendlyName объекта и сам объект.
А как получить FirendlyName если у меня есть только сам объект в виде IUnknonw*? |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Никак. IUnknown не обязан поддерживать FriendlyName. Можно попробовать извлечь из IUnknown какой нибудь интерфейс (через QueryInterface) способный создать Moniker (например IPersistMoniker или еще чего нибудь).
А зачем вообще понадобилось это FriendlyName? |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Я работаю с DirectShow. Эта система, с моей скромной точки зрения, написана сумбурно, поэтому всё приходится контролировать. Я распечатываю в отладочных целях все этапы: что, где, когда и так далее.
Мне логически непонятно. Вот я создаю энумератор устройств. Этот энумератор выдаёт мне моникеры. Каждый моникер позволяет мне получить френдли имя. Ну я перебрал устройства, потом выбрал нужное, для чего попросил моникера прибиндиться к объекту. Всё, объект я получил, моникер можно выкинуть. Но тогда получается, что френдли имя пропадает. Как же его узнать потом? Может быть, любой IUnknown можно попросить QueryInterface дать мне IMoniker? И, если получится, тогда это будет моникер того объекта? |
|||
|
||||
| xvr |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Не выкидывайте моникер. Аналогичный пример:
Добавлено через 1 минуту и 43 секунды Кстати, насколько я помню в DS устройства производные не от голого IUnknown, а от чего то посложнее. У этого 'чего то' нет случайно метода для получения какого нибудь FriendlyName? |
||||||||
|
|||||||||
| Dims |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Вообще-то мне не надо, чтобы с тем же. Мне нужно ровно то, что написано -- FriendlyName объекта. Хотя непонятно, что это может быть за "другое" имя? Система может самостоятельно сочинить и выдать в качестве имени главу из Евгения Онегина? Добавлено через 1 минуту и 7 секунд
Есть, но там пусто |
||||
|
|||||
| xvr |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Может.
Рекомендую хранить Moniker'ы |
||||||||
|
|||||||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
||||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Это свойство моникера, а не объекта. И оно не совсем произвольно, оно не является уникальным. Прдставь себе, что все объекты лежат в файловой системе. В таком случае именем объекта будет путь из корня до объекта. Теперь представь, что эта файловая система поддерживает ссылки. При этом становится возможным добраться до объекта многими путями (через ссылки). И ВСЕ эти пути будут правильным именем объекта. При этом сам объект может вообще не знать, что у него есть имя
|
||||
|
|||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Ну так я не против. Пусть имён будет много и пусть объект их не знает. Но кто-то же должен знать его имена, если они у него есть? У кого спросить? В файловой системе имя является идентификатором. Поэтому, когда я обращаюсь к файлу, я неизбежно делаю это по имени и потому в библиотеке можно и не делать функции определении имени. Имя это аргумент, первичный ключ. А вот, например, размер файла -- это просто его свойство. И в библиотеке есть функция для его получения - _filelength. В DS имя не играет роли первичного ключа. Я нахожу объекты по типам и интерфейсам. Поэтому, было бы логично дать возможность мне узнать это имя. Это сообщение отредактировал(а) Dims - 29.10.2009, 14:31 |
|||
|
||||
| xvr |
|
||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
У моникера
В COM путь к файлу соотвествует моникеру, а экземпляр IUnknown соотвествует handle'у файла
Но так как оно нафиг никому (в программе) не нужно, то оно имеет право быть пустым |
||||||||||
|
|||||||||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Моникера нет.
Совершенно верно! Это ещё одна из причин, почему нельзя получить имя по хендлу -- потому что хендл может обозначать не только файл, но и поток другой природы, у которого имени нет. А может ли быть в DS объект, который где-то когда-то не может быть получен через моникер? |
|||
|
||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
IUnknown это тоже объект 'другой природы'. У него тоже может не быть имени.
|
||||||
|
|||||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |