Comment envoyer un paramètre de rappel d'événement à un objet COM avec .NET
-
23-10-2019 - |
Question
J'ai Référencés COM dll. Certaines méthodes attendent un paramètre de rappel. J'ai vérifié le interop.MyComLib.dll dans le réflecteur:
public virtual extern void Foo([In, MarshalAs(UnmanagedType.IDispatch)] object pDispProgressCallBack);
Comment puis-je envoyer ce paramètre? Je ne peux pas envoyer un délégué (à l'exception de la compilation). Je l'ai essayé d'envoyer this
et InvalidCastException
reçu.
La solution
IDispatch est une interface COM. Le CLR automatiquement mettre en œuvre si vous utilisez [ComVisible (true)] et [ClassInterface (ClassInterfaceType.AutoDispatch)] attributs de votre classe. Vous pouvez ensuite passer une instance de la classe et la distribution réussirez. Le code est alors va probablement appeler une sorte de méthode sur cette classe alors assurez-vous qu'il est mis en œuvre. Il ne ressort pas de la question quelle méthode qui pourrait être et ce qui devrait ressembler à sa signature. Il doit correspondre exactement, une non-concordance est susceptible d'empêcher le rappel ne se produise jamais sans diagnostic.
Autres conseils
Vous voulez passer dans un objet qui est un IDispatch et a une méthode avec une DispId de 0. Voir cet article pour savoir comment créer un IDispatch, puis donnez-lui une seule méthode avec DispId (0).