J’ai un souci bien génant avec un projet d’une librairie de classes .net 2.0b à exposer en COM.
Mon soucis vient du fait qu’une de mes classes est dérivée d’une classe abstraite générique. Tout est pourtant fait comme il faut, mais le compilo me râle dessus et refuse d’exposer ma classe dans mon objet COM.
Mes classes sans détailler leur contenu (inutile) (faire attention aux espaces de noms) :
[code]using System;
using System.Runtime.InteropServices;
namespace PMLInterop
{
[Guid(« 36DC388E-80FD-467b-8648-E9A72F4E8F8D »)]
[ClassInterface(ClassInterfaceType.None)]
[ProgId(« PMLInterop.ReqInfoProduit »)]
public class ReqInfoProduit : MessageBase<PMLInteropIL.ReqInfoProduit>, IReqInfoProduit
{
}
}[/code]
[code]using System;
using System.Runtime.InteropServices;
namespace PMLInterop
{
[Guid(« 2E4452EC-86AA-46d1-A303-DFF7C4B444D9 »)]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IReqInfoProduit
{
}
}[/code]
[code]using System;
using System.Runtime.InteropServices;
namespace PMLInterop
{
[Guid(« 030654A0-7B86-4344-A988-180793B21A5F »)]
[ClassInterface(ClassInterfaceType.None)]
public abstract class MessageBase : IMessage
{
}
}[/code]
[code]using System;
using System.Runtime.InteropServices;
namespace PMLInterop
{
[Guid(« CABAFB9C-38FC-4fbf-9731-F8C59FCF0C13 »)]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IMessage
{
}
}[/code]
La classe suivante est utilisée par PMLInterop.ReqInfoProduit qui dérive de la classe abstraite générique PMLInterop.MessageBase. Bien faire attention aux espaces de noms, PMLInteropIL n’est pas censée être une librairie exposée COM.
[code]using System;
namespace PMLInteropIL
{
public class ReqInfoProduit
{
}
}[/code]
Je n’ai pas détaillé toutes mes classes.
Pour info, j’implémente mes interfaces de façon implicite dans mon code.
Mon problème est plus un problème de compréhension de l’erreur: je comprend pas le message d’erreur du type library exporter. Je ne vois pas où mettre [ComDefaultInterface(typeof(…))] pour régler le soucis.
Je veux seulement pouvoir exporter en COM ma classe PMLInterop.ReqInfoProduit comprenant les propriétés et méthodes de l’interface PMLInterop.IReqInfoProduit et les propriétés et méthodes de PMLInterop.IMessage, utilisé par la classe générique abstraite MessageBase.
Les beta c’est bien, mais côté support… c’est pas terrible.
A part sur ce blog, j’ai trouvé personne rencontrant ce problème.
Si vous pouvez m’aider, je fournirai bières et putes à volonté