2010-01-15 3 views
14

Podczas rejestrowania zarządzanej klasy dla COM Interop ręcznie potrzebne są określone klucze rejestru. Na przykładCzy podczas rejestrowania zarządzanego składnika COM potrzebny jest klucz "Kategorie implementowane"?

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

Zauważyłem, że kiedy VS rejestruje bibliotekę dla modelu COM, dodaje także kluczowym

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

Co to jest klucz do, i jest to absolutnie konieczne? O ile wiem, życie przebiega bez problemu, ale może nie napotkam okoliczności, w których jest to potrzebne.

Odpowiedz

23

To CATID, kategoria komponentów. Host sterujący może użyć go do, powiedzmy, filtrowania elementów, które pojawiają się w przyborniku, oferując tylko te, które implementują oczekiwany zestaw interfejsów.

Możesz zobaczyć listę znanych kategorii komponentów w kluczu rejestru HKCR\Component Categories. Ta, której używa Regasm.exe, oznacza "ten serwer COM jest zaimplementowany w .NET". Warto wiedzieć, że program .NET nie powinien korzystać z serwera COM zaimplementowanego w zarządzanym języku, dlatego powinien korzystać bezpośrednio z metadanych z zespołu.

CATID nie są dobrze udokumentowane. Co czyni je dość bezużytecznymi, rzadko będziesz mieć kłopoty, jeśli je po prostu pominiesz. Jeśli jakiś dostawca hosta kontrolnego wymaga użycia CATID, aby serwer COM był użyteczny na hoście, powiadomi Cię o tym wyraźnie.

+0

Hans - pomocna odpowiedź dzięki. Czy masz na myśli "program .NET nie może używać serwera COM zaimplementowanego w * zarządzanym * języku * zamiast" zarządzanym języku "? Więcej informacji na temat CATID pod adresem http://msdn.microsoft.com/en-us/magazine/cc301432.aspx –

+0

@Simon: nie, serwery COM są zwykle implementowane w niezarządzanym języku. –

Powiązane problemy