Question

J'ai l'interface suivante que j'essaie de rendre visible par COM. Lorsque j'essaie de générer la bibliothèque de types, elle n'aime pas le fait que ma classe d'implémentation dérive d'une classe générique.

Est-il possible d'utiliser une classe générique en tant que classe d'implémentation COM? (Je sais que je pourrais écrire un wrapper non générique et l'exporter vers COM, mais cela ajoute un autre calque dont je préférerais me passer.)

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

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

Message d'erreur:

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.
Était-ce utile?

La solution

Les types génériques et les types dérivés d'un type générique ne peuvent pas être exportés. Définissez ComVisible (false) sur votre type MyClass . Vous devrez soit créer une implémentation de classe non générique, soit utiliser l'interface uniquement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top