Ist es möglich, eine COM-Schnittstelle mit einer .NET-Generika-Klasse zu implementieren?
-
02-07-2019 - |
Frage
Ich habe die folgende Schnittstelle, die ich versuche, COM-sichtbar zu machen. Wenn ich versuche, die Typ-Bibliothek zu erzeugen, mag es nicht die Tatsache, dass meine Implementierungsklasse von einer generic-Klasse abgeleitet wird.
Ist es möglich, eine generische Klasse als COM-Implementierungsklasse zu benutzen? (Ich weiß, ich könnte einen nicht-generic-Wrapper schreiben und exportieren, die zu COM, aber dies fügt eine weitere Schicht, die ich ohne etwas tun würde.)
[ComVisible(true)]
public interface IMyClass
{
...
}
[ComVisible(true), ComDefaultInterface(typeof(IMyClass))]
[ClassInterface(ClassInterfaceType.None)]
public class MyClass : BaseClass<IMyClass>, IMyClass
{
...
}
Fehlermeldung:
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.
Lösung
generische Typen und Arten, die von einem allgemeinen Typ ableiten können nicht exportiert werden. Set ComVisible(false)
auf Ihrem MyClass
Typ. Sie werden müssen entweder eine nicht-generische Klasse Implementierung erstellen oder die Schnittstelle verwenden nur.