Je suis actuellement en train de déplacer du code du C++ natif vers le C++ géré (pur). Le code implique l'interaction avec Windows Active Scripting. Actuellement, notre code natif fournit une classe appelée 'ObjectDispatch' qui implémente 'IDispatch' (en utilisant ATL). Cette implémentation de classe interroge notre propre classe 'Object' à l'exécution pour déterminer les méthodes et propriétés qu'elle prend en charge, puis transmet les appels 'IDispatch :: Invoke' à cet objet.Création d'une classe COM .NET IDispatch dont le contenu est disponible uniquement au moment de l'exécution
J'ai vu des exemples utilisant .NET COM interop qui supportent 'IDispatch', cependant ces implémentations étaient soit dérivées d'IDL ou basées sur la spécification d'une classe .NET, dont aucune ne se produit au moment de l'exécution.
Il semble que Interop .NET COM peut générer une implémentation de « IDispatch » au moment de la compilation si vous utilisez l'attribut suivant sur une classe donnée:
[ClassInterface(ClassInterfaceType::AutoDispatch)]
Je suppose que je pourrais générer dynamiquement une classe à l'exécution qui prend en charge cet attribut. Cependant avant que je tente que je me demande si quelqu'un a des idées comment cela pourrait être réalisé par des moyens similaires qui ont été utilisés avec le code natif.
Notez qu'à ce stade, la classe 'Object' reste en tant que classe native.
Je suis revenu à cette question deux ou trois fois, et je ne comprends pas vraiment ce que vous demandez ... Avez-vous un modèle d'objet natif exposé via IDispatch, et que vous voulez consommer à partir du code managé? –
Oui, vous avez raison. Je suppose qu'un meilleur titre aurait été simplement "Puis-je implémenter directement IDispatch dans .net?". – karmasponge