Pregunta

Tengo la siguiente interfaz que estoy tratando de hacer visible a COM. Cuando intento generar la biblioteca de tipos, no me gusta el hecho de que mi clase de implementación se derive de una clase genérica.

¿Es posible usar una clase genérica como una clase de implementación COM? (Sé que podría escribir un contenedor no genérico y exportarlo a COM, pero esto agrega otra capa de la que preferiría prescindir).

[ComVisible(true)]
public interface IMyClass
{
   ...
}

[ComVisible(true), ComDefaultInterface(typeof(IMyClass))]
[ClassInterface(ClassInterfaceType.None)]
public class MyClass : BaseClass<IMyClass>, IMyClass
{
   ...
} 

Mensaje de error:

Warning: Type library exporter encountered a type that derives 
from a generic class and is not marked as 
[ClassInterface(ClassInterfaceType.None)]. Class interfaces cannot
be exposed for such types. Consider marking the type with 
[ClassInterface(ClassInterfaceType.None)] 
and exposing an explicit interface as the default interface to 
COM using the ComDefaultInterface attribute.
¿Fue útil?

Solución

Los tipos genéricos y los tipos que se derivan de un tipo genérico no se pueden exportar. Establezca ComVisible (false) en su tipo MyClass . Deberá crear una implementación de clase no genérica o usar solo la interfaz.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top