2010-01-15 7 views
14

Al registrar una clase administrada para la Interoperabilidad COM a mano, se necesitan ciertas claves de registro. Por ejemplo¿Se necesita la clave 'Categorías Implementadas' cuando se registra un Componente COM Administrado?

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

me he dado cuenta de que cuando VS registra una biblioteca para interoperabilidad COM, sino que también añade una clave

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

¿Cuál es esta tecla para, y es absolutamente necesario? Por lo que puedo decir, la vida sigue sin ella, pero tal vez no encuentro las circunstancias en que se necesita.

Respuesta

23

Es un CATID, una categoría de componente. Un host de control puede usarlo para, por ejemplo, filtrar elementos que aparecen en una caja de herramientas, solo ofreciendo aquellos que implementan un conjunto esperado de interfaces.

Puede ver una lista de categorías de componentes conocidos en la clave de registro HKCR\Component Categories. El que utiliza Regasm.exe significa que "este servidor COM está implementado en .NET". Lo cual es algo útil saber ya que un programa .NET no debe usar un servidor COM que se implemente en un lenguaje administrado, sino que debe usar los metadatos en el ensamblado directamente.

CATID no están bien documentados. Lo que los hace bastante inútiles, rara vez tendrás problemas si simplemente los omites. Si algún proveedor de host de control requiere que use un CATID para hacer que su servidor COM pueda utilizarse en su host, le informarán de ello de manera explícita.

+0

Hans - respuesta útil gracias. ¿Quiere decir "un programa .NET no puede usar un servidor COM que se implementa en un lenguaje * un * administrado" en lugar de "un lenguaje gestionado"? Más sobre CATID en http://msdn.microsoft.com/en-us/magazine/cc301432.aspx –

+0

@Simon: no, los servidores COM normalmente se implementan en un lenguaje no administrado. –

Cuestiones relacionadas