J'ai un serveur COM C++ non géré configuré pour déclencher des événements et j'essaie de gérer ces événements à partir de mon application C#.InvalidCastException lors de la configuration du gestionnaire pour l'événement COM
Cependant, je reçois un InvalidCastException lors de la configuration du gestionnaire
myCOMObj.MyCOMEvent += new MyCOMSource_MyCOMEventHandler(handler);
La trace de la pile montre:
cast spécifié est pas valide. à System.Runtime.InteropServices.ComTypes.IConnectionPoint.Advise (Object pUnkSink, Int32 & dwCookie) à MyCOMSource_EventProvider.add_MyCOMEvent (MyCOMSource_MyCOMEventHandler) à MyCOMSource_Event.add_MyCOMEvent (MyCOMSource_MyCOMEventHandler)
J'ai essayé d'installer mon propre IConnectionPoint comme celui-ci
IConnectionPointContainer connectionPointContainer = (IConnectionPointContainer)myCOMObj;
Guid sourceGuid = typeof(MyCOMSource).GUID;
IConnectionPoint connectionPoint;
connectionPointContainer.FindConnectionPoint(ref sourceGuid, out connectionPoint);
int cookie;
connectionPoint.Advise(myEventNotifier, out cookie);
où myEventNotifier
est un objet de classe définie comme ceci:
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class EventNotifier : MyCOMSource
...
Mais je reçois le même InvalidCastException à connectionPoint.Advise
avec la trace de la pile
Specified cast is not valide. à System.Runtime.InteropServices.ComTypes.IConnectionPoint.Advise (Object pUnkSink, Int32 & pdwCookie)
Je suppose que c'est un problème du côté client en raison du comportement cohérent lorsque je tente de faire mon propre ConnnectionPoint choses et quand je laisse le cadre le faire pour moi. Mais dans le cas où il est quelque chose sur le côté serveur:
Du côté serveur COM je l'ai déclaré comme ça
coclass MyCOMCoClass
{
[default] dispinterface MyCOMInterface;
[default, source] dispinterface MyCOMSource;
};
Je les CONNECTION_MAP
et CONNECTION_PART
macros en place dans ma classe aussi bien.
Que pourrait-il se passer, comment puis-je déboguer cela?