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.

Était-ce utile?

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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top