Необходим ли ключ "Реализованные категории" при регистрации управляемого COM-компонента?

При регистрации управляемого класса для COM Interop вручную необходимы определенные ключи реестра. Например

HKEY_CLASSES_ROOT
  CLSID\[My Cls Id]
    InprocServer32
     (Default) = "mscoree.dll"
     Assembly = [My assembly name]
     etc.

Я заметил, что когда VS регистрирует библиотеку для COM Interop, она также добавляет ключ

HKEY_CLASSES_ROOT
  CLSID\[My Cls Id]
    Implemented Categories
      {62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}

Для чего этот ключ, и это абсолютно необходимо? Насколько я могу судить, жизнь идет отлично, но, возможно, я не сталкиваюсь с обстоятельствами, в которых это необходимо.

Ответы

Ответ 1

Это категория CATID, категория компонента. Управляющий узел может использовать его, скажем, для фильтрующих элементов, отображаемых в панели инструментов, только для тех, которые реализуют ожидаемый набор интерфейсов.

Вы можете увидеть список известных категорий компонентов в разделе реестра HKCR\Component Categories. Тот, который использует Regasm.exe, означает "этот COM-сервер реализован в .NET". Что полезно знать, так как .NET-программа не должна использовать COM-сервер, который реализован на управляемом языке, он должен использовать метаданные непосредственно в сборке.

CATID не являются хорошо документированными. Что делает их бесполезными, у вас редко бывают проблемы, если вы просто их опустите. Если какой-либо поставщик хоста управления требует от вас использовать CATID, чтобы ваш COM-сервер мог использоваться на своем хосте, они сообщают вам об этом явно.