É possível implementar uma interface COM com uma classe genéricos .NET?
-
02-07-2019 - |
Pergunta
Eu tenho a seguinte interface que eu estou tentando fazer COM-visível. Quando eu tentar gerar a biblioteca tipo que não gosta do fato de que meus deriva classe de implementação de uma classe genérica.
É possível usar uma classe genérica como uma classe de implementação COM? (Eu sei que eu poderia escrever um invólucro não-genéricos e de exportação que a COM, mas isto acrescenta outra camada que eu prefiro fazer sem.)
[ComVisible(true)]
public interface IMyClass
{
...
}
[ComVisible(true), ComDefaultInterface(typeof(IMyClass))]
[ClassInterface(ClassInterfaceType.None)]
public class MyClass : BaseClass<IMyClass>, IMyClass
{
...
}
Mensagem de erro:
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.
Solução
tipos genéricos e tipos que derivam de um tipo genérico não pode ser exportado. Set ComVisible(false)
do seu tipo de MyClass
. Você precisará criar uma implementação de classe não-genérico ou utilizar apenas a interface.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow