Здравствуйте.
Сижу, разбираюсь с категориями. Вроде всё просто, однако, работает не всё...
Вопрос №1:
При перечислении всех категорий через IEnumCATEGORYINFO перечисляются несколько категорий (штук десять), после чего очережой вызов Next заканчивается ошибкой E_OUTOFMEMORY. Если попытаться получить все скопом, в массив, то результат тот же, только сразу.
Внимательное изучение реестра дало следующее (я чуть не обалдел):
HKEY_CLASSES_ROOT\Component Categories\
... разные категории, которые нормально перечисляются...
{7DD95801-9882-11CF-9FA9-00AA006C42C4 - вот тут IEnumCATEGORYINFO->Next падает. И я даже не удивлён этим...
409 Controls that are safely scriptable
{7DD95801-9882-11CF-9FA9-00AA006C42C4}
409 Controls that are safely scriptable
800 Safe for scripting
{7DD95802-9882-11CF-9FA9-00AA006C42C4
409 Controls safely initializable from persistent data
{7DD95802-9882-11CF-9FA9-00AA006C42C4}
409 Controls safely initializable from persistent data
800 Safe for initializing
... разные категории, которые выглядят нормально...
OleView, не сомневаясь в своей правоте, отображает всё (если встать на Grouped by Component Categories), видимо черпает информацию прямо из реестра, без ICatInformation... Но там, где показывает компоненты в категориях он тоже не видит ни одной категории после сбойной.
Всё это в Win 2000 Pro.
Собственно, вопрос: насколько это нормально и что с этим делать?
Вопрос №2:
Некоторые категории имеют несколько строчек с описением. Например
HKEY_CLASSES_ROOT\Component Categories\{40FC6ED3-2438-11CF-A3DB-080036F12502}
409 Embeddable Objects
800 Insertable
Мне при перечислении возвращается тольк "Insertable", а OleView показывает "Embeddable Objects". Почему такая разница, можно ли получить все варианты описания? И как для своей категории задать несколько вариантов?
SH>Вопрос №1:
SH>При перечислении всех категорий через IEnumCATEGORYINFO перечисляются несколько категорий (штук десять), после чего очережой вызов Next заканчивается ошибкой E_OUTOFMEMORY. Если попытаться получить все скопом, в массив, то результат тот же, только сразу.
SH>Внимательное изучение реестра дало следующее (я чуть не обалдел):
SH>SH>HKEY_CLASSES_ROOT\Component Categories\
SH> ... разные категории, которые нормально перечисляются...
SH> {7DD95801-9882-11CF-9FA9-00AA006C42C4 - вот тут IEnumCATEGORYINFO->Next падает. И я даже не удивлён этим...
SH> 409 Controls that are safely scriptable
SH> {7DD95801-9882-11CF-9FA9-00AA006C42C4}
SH> 409 Controls that are safely scriptable
SH> 800 Safe for scripting
SH> {7DD95802-9882-11CF-9FA9-00AA006C42C4
SH> 409 Controls safely initializable from persistent data
SH> {7DD95802-9882-11CF-9FA9-00AA006C42C4}
SH> 409 Controls safely initializable from persistent data
SH> 800 Safe for initializing
SH> ... разные категории, которые выглядят нормально...
SH>
SH>OleView, не сомневаясь в своей правоте, отображает всё (если встать на Grouped by Component Categories), видимо черпает информацию прямо из реестра, без ICatInformation... Но там, где показывает компоненты в категориях он тоже не видит ни одной категории после сбойной.
SH>Всё это в Win 2000 Pro.
SH>Собственно, вопрос: насколько это нормально и что с этим делать?
Да почистить реестр и все. Какая-то софтина нагадила при регистрации своих компонентов. (Задача максимум: выяснить, какая софтина, и никогда больше ничего от той же фирмы не запускать [если, конечно, не окажется, что это Microsoft]).
SH>Вопрос №2:
SH>Некоторые категории имеют несколько строчек с описением. Например
SH>SH>HKEY_CLASSES_ROOT\Component Categories\{40FC6ED3-2438-11CF-A3DB-080036F12502}
SH> 409 Embeddable Objects
SH> 800 Insertable
SH>
SH>Мне при перечислении возвращается тольк "Insertable", а OleView показывает "Embeddable Objects". Почему такая разница, можно ли получить все варианты описания? И как для своей категории задать несколько вариантов?
Число слева — это locale identifier. Подразумевается, что написано одно и то же, но на разных языках. 409 — English (US), 800 — LOCALE_SYSTEM_DEFAULT. При вызове EnumCategories первым параметром указывается LCID, в которой хочется получать описания.
Соответственно, при регистрации нужно указать соответствующее значение в поле lcid структуры CATEGORYINFO. Если хочется иметь несколько описаний на разных языках, нужно зарегистрировать категорию несколько раз с разными значениями lcid.
Здравствуйте SergH, Вы писали:
SH>Вопрос №1:
SH>При перечислении всех категорий через IEnumCATEGORYINFO перечисляются несколько категорий (штук десять), после чего очережой вызов Next заканчивается ошибкой E_OUTOFMEMORY. Если попытаться получить все скопом, в массив, то результат тот же, только сразу.
SH>Внимательное изучение реестра дало следующее (я чуть не обалдел):
SH>SH> {7DD95801-9882-11CF-9FA9-00AA006C42C4 - вот тут IEnumCATEGORYINFO->Next падает. И я даже не удивлён этим...
SH> {7DD95802-9882-11CF-9FA9-00AA006C42C4
SH>
SH>OleView, не сомневаясь в своей правоте, отображает всё (если встать на Grouped by Component Categories), видимо черпает информацию прямо из реестра, без ICatInformation... Но там, где показывает компоненты в категориях он тоже не видит ни одной категории после сбойной.
Точно, такая же фигня, и что интересно — теже самые категории, а я еще удивлялся —
http://www.rsdn.ru/forum/?mid=33554Автор: Odi$$ey
Дата: 06.03.02
— почему это у меня OleView не все категории отображает, прибил сейчас эту мерзость и все появилось
Здравствуйте Alex Fedotov, Вы писали:
AF>Да почистить реестр и все. Какая-то софтина нагадила при регистрации своих компонентов. (Задача максимум: выяснить, какая софтина, и никогда больше ничего от той же фирмы не запускать [если, конечно, не окажется, что это Microsoft]).
Прикол в том, что похоже, эта софтина — как раз от Майкрософт
Т.к. на моем Win2k те же самые записи в реестре, даже GUIDы совпадают
С Уважением, lol
Здравствуйте Alex Fedotov, Вы писали:
AF>Да почистить реестр и все. Какая-то софтина нагадила при регистрации своих компонентов. (Задача максимум: выяснить, какая софтина, и никогда больше ничего от той же фирмы не запускать [если, конечно, не окажется, что это Microsoft]).