Domanda

Ho la seguente interfaccia che sto cercando di rendere visibile COM. Quando provo a generare la libreria dei tipi non mi piace il fatto che la mia classe di implementazione derivi da una classe generica.

È possibile utilizzare una classe generica come classe di implementazione COM? (So ??che potrei scrivere un wrapper non generico ed esportarlo in COM, ma questo aggiunge un altro livello di cui preferirei fare a meno.)

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

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

Messaggio di errore:

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.
È stato utile?

Soluzione

I tipi generici che derivano da un tipo generico non possono essere esportati. Imposta ComVisible (false) sul tuo tipo MyClass . Dovrai creare un'implementazione di classe non generica o utilizzare solo l'interfaccia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top