Требуется ли ключ «реализованные категории» при регистрации управляемого COM-компонента? - PullRequest
15 голосов
/ 15 января 2010

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

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 Ответ

24 голосов
/ 15 января 2010

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

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

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

...