Question

Nous travaillons avec une application native existante (très probablement écrit en VB) qui se charge des ensembles et appelle des méthodes avec « une liaison tardive. » Nous n'avons pas accès à son code source.

Nous voulons implémenter cette interface en C #, et que l'application native appeler notre assemblée C #.

Est-ce quelque chose qui est possible?

Est-ce tout ce que nous avons à faire au-delà de correspondre les noms des méthodes et des signatures de méthode pour le faire fonctionner?

Était-ce utile?

La solution 2

Ce sont les étapes nécessaires pour le faire fonctionner:

  1. Mark classe [ComVisible (true)], et assurez-vous de lui donner un attribut unique [Guid]
  2. correspondent à votre ProgId à votre classe qui est normalement MyNamespace.MyClass, mais vous pouvez ajouter un attribut de votre classe pour passer outre cela aussi
  3. Mettez le bon [DispId] attributs pour chaque méthode qui sera appelée
  4. Compiler votre assemblage et celle regasm.exe sur votre assemblage

Et le tour est joué! Le code natif peut appeler votre C # via « liaison tardive ». Moi, bien sûr, dû configurer plusieurs clés de registre pour rendre mon applciation natif savoir comment charger mon assemblée, mais tout fonctionne.

Autres conseils

Si vous essayez d'appeler du code .NET de VB6 la manière la plus propre serait de rendre le code C # apparaît comme un objet COM au code VB6 - donc oui, vous devez marquer votre code C # en ComVisible et assurer qu'il ressemble à l'interface COM existante.

Mise à jour: est un article vous aider à démarrer.

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