Ist es möglich, eine COM-Schnittstelle mit einer .NET-Generika-Klasse zu implementieren?

StackOverflow https://stackoverflow.com/questions/134633

  •  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.
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top