Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,702

Как узнать, какие интерфейсы принадлежат данной категории?

04.04.2013, 19:46. Показов 2501. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Роджерсон:

Регистрируя себя в некоторой категории, компонент тем самым гарантирует, что поддерживает все входящие в категорию интерфейсы.
Одно из применений категорий — задание набора интерфейсов, которые компонент обязан поддерживать.
Я уже всяко курил OleView и ICatInformation
Не могу я узнать, какие интерфейсы задаёт некоторая категория.
Помогите, ребята! На всякий случай:

ICatInformation применяется для получения информации о категориях в системе. С помощью этого интерфейса Вы можете найти:
!" все категории, зарегистрированные в системе;
!" все компоненты, принадлежащие данной категории;
!" все категории, к которым принадлежит данный компонент.
Пункта "Все категории, к которым принадлежит данный интерфейс", нет...

Добавлено через 16 минут
Ведь работать надо как: допустим, нам нужно использовать какой-то интерфейс. Ладно, мы не можем СРАЗУ узнать, какой компонент его использует. НО что мы можем сделать?

1) Пробежаться по категориям компонентов
2) Выбрать те, в которые этот интерфейс включен
3) Пробежаться по выбранным и выбрать нужный компонент

Если такого нельзя сделать (пункт 2)- остаётся руками только разводить- на фига вся эта бальда задумана.
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.04.2013, 19:46
Ответы с готовыми решениями:

Достать все товары, которые принадлежат более чем одной категории
Я это сделал, вывел так: название продукта и название категории, через запятую, можно ли вывести не так, а что бы выводило каждый раз...

Как сделать блог категории в отдельном модуле, или какие еще есть решения в joomla 2.5
Доброе время суток господа! хочу реализовать под шапкой вывод последних статей из категории "Статьи" нужно чтобы эта лента...

Какие интерфейсы реализует класс String?
Всех С Новым Годом ! Крепкого здоровья ! Удачи в новом году ! И всего самого наилучшего ! Есть такой вопрос : какие интерфейсы...

15
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
05.04.2013, 11:56
Цитата Сообщение от kravam Посмотреть сообщение
Ведь работать надо как
работать так не надо. мы ЗНАЕМ какой объект мы хотим вызвать, а не ищем КАКОЙ-НИБУДЬ объект реализующий нужный нам интерфейс. вот, например, вы вышли на остановку: вы ведь не лезете во все автобусы (а ведь у всех у них один и тот же интерфейс - 4 колеса и 3 двери) - вы лезете в автобус нужного вам маршрута. скорее всего вы имеете ввиду какие-нибудь системные объекты которые как правило существуют в единственном числе. в общем случае - ваш подход неверен.
Цитата Сообщение от kravam Посмотреть сообщение
Выбрать те, в которые этот интерфейс включен
хз как такое возможно. по идее мы просто ЗНАЕМ по документации, что объекты реализующие интересующие нас интерфейсы (хотя не в интерфейсах суть, а в назначении самих объектов) входят в некую категорию.
----
однако oleview как-то узнает какие интерфейсы поддерживает объект... интересно - как?

Добавлено через 8 минут
а. понял. наверное он дергает IDispatch

Добавлено через 2 минуты
хм... нет. не так...
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,702
05.04.2013, 12:30  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
мы ЗНАЕМ какой объект мы хотим вызвать, а не ищем КАКОЙ-НИБУДЬ объект реализующий нужный нам интерфейс.
А Роджерсон по-другому работает:
Минималистский взгляд на Реестр Windows состоит в том, что это длинный список CLSID, с каждым из которых
связано имя файла. Клиент может просмотреть эти CLSID и выбрать подходящий компонент. Но как клиент
определяет, какой именно компонент следует использовать? Один из вариантов — вывести список
дружественных имен компонентов и предоставить пользователю выбирать. Однако пользователю вряд ли
понравится, если, выбрав компонент из длинного списка, он в итоге узнает, что тот не работает. Загружать
каждый из компонентов, упомянутых в Реестре, и запрашивать у них необходимые нам интерфейсы — слишком
затяжное мероприятие. Надо как-то уметь определять, поддерживает ли компонент нужные интерфейсы, до
создания экземпляра этого компонента.
Решение этой проблемы дают категории компонентов (component categories). Категория компонентов — это
набор интерфейсов, которым присвоен CLSID, называемый в данном случае CATID.
Вот и так же хочу. С помощью OLeView (или уж по- другому, но Роджерсон говорит про OLeView) найти компонент, который реализует данный интерфейс
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
05.04.2013, 13:14
Цитата Сообщение от kravam Посмотреть сообщение
Вот и так же хочу
этот подход базируется на формальном соглашении. категория - это закрепленная в документации условность, это соглашение о том, что объекты принадлежащие некой категории выполняют сходные задачи. причем это не подразумевает, что эти объекты обязательно реализуют некую группу интерфейсов. например, в стандарте OPC DA 2.0 некоторые интерфейсы помечены как опция. то есть разработчик сам решает будет ли его сервер поддерживать этот интерфейс. и тем не менее объект включается в категорию CATID_OPCDAServer20. таким образом, в этой категории будут объекты поддерживающие группу интерфейсов помеченных в БУМАЖНОЙ документации как обязательные и, возможно, еще некоторые интерфейсы (у каждого объекта свои, но в пределах БУМАЖНОГО стандарта OPC DA 2.0) которые являются опцией. кроме того, объекты могут поддерживать вообще какие-то левые интерфейсы для своего удовольствия. а еще, они могут не соответствовать БУМАЖНОМУ стандарту и не поддерживать какие-то из обязательных интерфейсов. не существует механизма проверки действительно ли объекту назначена корректная категория - категория это чистая условность. я могу зарегистрировать объект в любой категории даже если он не соответствует требованиям закрепленным в БУМАЖКАХ описывающих объекты включаемые в эти категории. по всем перечисленным причинам нет смысла и способа выяснить какие интерфейсы вошли в категорию.
---
а теперь ложка ужаса. как oleview узнает какие у моего объекта интерфейсы? никак. он не может узнать этого никак. чудес не бывает. поэтому он запрашивает ВСЕ УСТАНОВЛЕННЫЕ В СИСТЕМЕ интерфейсы у моего несчастного объекта. те интерфейсы на которые мой объект вернул "добро" oleview помещает в свое дерево. в лог файл ушло 15 448 запросов о выдаче указателя на интерфейс. вот такой вот стресс-тест на ровном месте. а вы говорите слишком затяжное мероприятие

Добавлено через 4 минуты
...причем если бы я не регистрировал библиотеку типов (а как еще по другому запись об интерфейсе попала в реестр?) - ну, вот, монстр я - сам реализовал маршалинг или не нуждался в нем вовсе по причине того что объект реализован в DLL - oleview тупо не нашел бы моих интерфейсов. а они бы были
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,702
05.04.2013, 13:17  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
а теперь ложка ужаса. как oleview узнает какие у моего объекта интерфейсы?
Это тоже полезная информация, но хотелось бы всё-таки добить уж вопрос-то- как узнать категории, к которым принадлежит интерфейс? Или Роджерсон не прав, а OleView хз для чего. И пожалуйста, воздержитесь от употребления слов, для изучения которых надо отвлекаться от основной темы. Например OPC DA 2.0.

И маршаллинг я ещё не изучил. Я же не виноват, что Роджерсон велит смотреть OLeView сейчас, а маршаллинг неизвестно когда ещё будет. И библиотеку типов не изучил.
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
05.04.2013, 13:51
Цитата Сообщение от kravam Посмотреть сообщение
как узнать категории, к которым принадлежит интерфейс
ответ очевиден:
-вы можете узнать все компоненты принадлежащие выбранной категории (через объект CLSID_StdComponentCategoriesMgr)
-вы можете узнать все интерфейсы зарегистрированные в системе (не смотрел чем, но явно как-то можно, хотя бы через реестр)
-вы можете у всех компонентов принадлежащих выбранной категории запросить все интерфейсы зарегистрированные в системе и выделить те из них которые есть у всех компонентов принадлежащих выбранной категории
...но не факт, что ваше знание поможет вам. ибо как было сказано: категория не равна четко обозначенному списку интерфейсов. категория - это просто пометка. зеленый фломастер.
Цитата Сообщение от kravam Посмотреть сообщение
OPC DA 2.0
это стандарт. просто бумажка в которой описываются интерфейсы используемые ммм... в промышленности для получения данных от оборудования. ни одного слова о том как вы их реализуете - только сигнатуры, типы и что оно должно делать (в предметном плане).
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,702
05.04.2013, 14:00  [ТС]
Да то, что категория не абсолют, я понял уже. Ещё: а с помощью OleView это делается? Попробуйте у себя на компе хоть для одного самого захудалого интерфейса найдите категорию, к которой он принадлежит. Ну или для какой-нибудь захудалой категории найдите интерфейс, который в неё входит. С помощью OleView. А я потом за вами повторю. Пока же я вижу там связь категорий и компонентов, не более.
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
05.04.2013, 14:28
Цитата Сообщение от kravam Посмотреть сообщение
найдите интерфейс, который в неё входит
нету такого понятия. интерфейс не входит в категорию. в категорию входят объекты. на моей машине я тупо (по работе) знаю что есть категория CATID_OPCDAServer20 и что в нее входят все OPC DA сервера установленные на машине. набор интерфейсов реализованных этими серверами может быть различен. однако, по-хорошему, должен быть в пределах официально принятого стандарта касающегося этих серверов.
Цитата Сообщение от kravam Посмотреть сообщение
потом за вами повторю
ну так открывайте любую категорию и смотрите на объекты которые в ней лежат. раскрывая каждый объект и любуясь предоставляемыми им интерфейсами можно сделать пространные размышления относительно функционального набора этой категории. не более того.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,702
05.04.2013, 14:45  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
нету такого понятия. интерфейс не входит в категорию
Вот я так и знал что щас к словам начнёте придираться. Прекрасно же понимаете о чём речь. Если категория интерфейсов, значит в неё интерфейсы должны как-то входить, включаться, иметься в ней. Ещё что-то. Быть в ней, существовать в ней. Если нет набора интерейсов, который можно было бы сопоставить с категорией интерфейсов- на фига она нужна?

+++++++++++++++++++++++++++++++++++

Цитата Сообщение от vxg Посмотреть сообщение
ну так открывайте любую категорию и смотрите на объекты которые в ней лежат. раскрывая каждый объект и любуясь предоставляемыми им интерфейсами можно сделать пространные размышления относительно функционального набора этой категории. не более того.
Ну вот я вижу, что один компонент реализует набор X интерфейсов, а другой компонент набор Y интерфейсов, X И Y, понятно, различны. И как мне на этом основании сделать вывод об интерфейсах, которые входят в эту категорию? Или опять скажете, что нет такого понятия?

Сказано ведь:
Регистрируя себя в некоторой категории, компонент тем самым гарантирует, что поддерживает все входящие в категорию интерфейсы.
(Кстати, да. Входящие в категорию. Это к вопросу о терминах. Но не суть.)
Так какие в ней входят? Так-то это не пространное знание, а вполне себе конкретное. Только непонятно, как это знание узнать.
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
05.04.2013, 15:23
Цитата Сообщение от kravam Посмотреть сообщение
на фига она нужна
это просто фломастер.
Цитата Сообщение от kravam Посмотреть сообщение
И как мне на этом основании сделать вывод об интерфейсах, которые входят в эту категорию? Или опять скажете, что нет такого понятия?
да, нету. категория - это фломастер. мы просто отмечаем, что некоторые объекты относятся к некоторой группе. по какому принципу мы решили отнести их к этой группе - нужно смотреть в документации которая породила эту категорию. во всяком случае я так это понял. умных книг не читал поэтому цитатами можете меня не лупить. может изначально MS и задумывал это как способ группировки объектов имеющих одинаковый набор интерфейсов, однако, если судить по текущему состоянию дел, то ли не допилили этот подход, то ли не стали цементировать оставив разработчикам пространство для маневра. вот в это то пространство и устремились всякие буйные
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,702
05.04.2013, 15:59  [ТС]
Так сразу бы так и сказали, что не знаете. Вопрос открыт.
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
05.04.2013, 16:06
Цитата Сообщение от kravam Посмотреть сообщение
Вопрос открыт
если вы верите oleview то вопрос закрыт. ибо oleview бомбит объект всеми возможными интерфейсами. то есть она не знает интерфейсы соответствующие категории. полагаю по той простой причине что таковых нет по определению. конечно, фразу в букваре показать не могу, а кто сможет? будем ждать. вечно.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,702
05.04.2013, 16:12  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
то есть она не знает интерфейсы соответствующие категории
А Роджерсон так не считает. Вопрос открыт.
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
05.04.2013, 16:23
хм. ну а вот так
"As the number of available components grows, it becomes increasingly difficult to manage these components. In terms of the interfaces they expose as well as the tasks they perform, many components offer similar functionality."
из http://msdn.microsoft.com/ru-R... s.85).aspx

Добавлено через 2 минуты
Цитата Сообщение от kravam Посмотреть сообщение
А Роджерсон так не считает
тем не менее даже этот классный парень хоть и пишет "Категория компонентов — это
набор интерфейсов, которым присвоен CLSID" нигде не роняет слов про то что же это за "набор" такой. предлагаю провести лингвистическую экспертизу его книги

Добавлено через 3 минуты
...кстати вот тут http://msdn.microsoft.com/ru-R... s.85).aspx
вообще пена
----
"The author of a component category definition creates a unique GUID (the CATID) that is published along with the definition. Other parties know the definition of this type and can make use of its supported classes accordingly. Like the method signature of an interface, a category's semantics should not be modified after being installed. It is better to maintain backward compatibility of the category by introducing a new category identifier with revised semantics.
Because interface identifiers (IID) and component category identifiers (CATID) exist in different namespaces, it seems as if it would be possible to use the same GUID for both an IID and a CATID. However, since IIDs are often used for the CLSID of the interface's proxy/stub server, there is the potential for conflict. Therefore, do not use the same GUID for an IID and CATID."
----
то есть насколько я понял они склоняют нас к тому что мы могли бы (если бы не было возможности конфликта) обзывать категории идентификаторами интерфейсов.. бред. получается каждому интерфейсу была бы сопоставлена категория.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,702
05.04.2013, 17:16  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
нигде не роняет слов про то что же это за "набор" такой. предлагаю провести лингвистическую экспертизу его книги
Да и пусть. Хотя бы увидеть этот набор, я бы уж с ним разобрался. Нет такой возможности. Категории интерфейсов есть, а самих интерфейсов нет. Это смешно даже. Ну и на фиг они нужны без интерфейсов-то? Сама по себе принадлежность компонентов в категориям ничего не даёт, как мы выяснили. То есть мы либо не умеем пользоваться OleView, либо она какая-то бесполезная. А английский я не знаю.

Это типа философская проблема. X(компонент) принадлежит множеству Y(категории). Что из этого следует? Ничего ровным счётом. А потому не следует, что у нас нет ни одной из характеристик Y. Что это за множество- чёрт его знает. А вот если бы у него была какая-то другая характеристика- набор интерфейсов, тогда бы мы про X сказали- ого, да надо как-то связать X с этим набором- наверное, он их реализует.

Пока же наблюдаем что некоторые интерфейсы сгруппированы в категории, которые нам ни фига не дают. Ничё полезного.
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
06.04.2013, 14:33
Цитата Сообщение от kravam Посмотреть сообщение
Ничё полезного
странный максимализм. почему - ничего? вот, к примеру, все сервера на машине сгруппированы в категорию. именно это дает мне возможность выбрать их инструментом похожим на обзор. в противном случае пришлось бы каждый объект обсыпать всеми интерфейсами для поиска серверов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.04.2013, 14:33
Помогаю со студенческими работами здесь

Какие элементы массива принадлежат отрезку [c;d]
Дан массив а1, а2,... an действительных числе. Нужно найти, какие числа принадлежат отрезку

Через какие интерфейсы сделать свой DataSource?
Люди подскажите через какие интерфейсы (IList, IBindingList и куча других) сделать свой сточник данных, который будет состоять из...

Проверить, какие из чисел А, В, С, D не принадлежат заданному интервалу
дано задание: проверить, какие из чисел А, В, С, D не принадлежат интервалу (3;15). вопрос: как указать это интервал? или просто...

Какие интерфейсы и методы должен реализовывать любой класс?
Какие интерфейсы должен реализовывать любой класс, что бы в последующем использовании было меньше проблем. Например опытным путём я...

Определите, есть ли в данной матрице строка, в которой все элементы принадлежат промежутку
Создайте и обработайте двумерный динамический массив. Задана матрица А. Определите, есть ли в данной матрице строка, в которой все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru