Débogage d’un projet VB6 qui appelle une dll .Net (C #)

Je suis stump dans ce problème depuis quelques heures maintenant. J’espère que quelqu’un a eu un problème similaire à celui-ci.

Nous avons développé un prototype de DLL .Net (C #) utilisant VS2010 et aimerions pouvoir l’appeler dans des applications C # et VB6.

Ma question est:

Est-il possible de déboguer une application VB6 qui appelle une dll .Net? Je reçois un message d’erreur ” Erreur d’automatisation Le système ne trouve pas le fichier spécifié

Le message d’erreur suggère qu’il manque quelque chose à mon application VB6 pour trouver la dll .Net.

Je suis conscient que si l’application VB6 a été compilée et que le fichier .exe a été créé, le VB6 appellera avec succès la fonctionnalité .Net dll lors de l’utilisation du fichier .exe.

Cependant, il est important que nous puissions déboguer via notre application VB6. Malheureusement, le débogage ne vous autorise pas à parcourir la ligne de code instanciant l’object de classe de la DLL .Net. Je n’arrive pas à faire ça.

NOTE: J’ai parcouru les forums et la documentation MSDN et je trouve principalement une solution pour appeler une DLL VB6 dans .NET; ce qui est malheureusement le contraire de ce que nous devons faire.

REMARQUE: j’ai déjà enregistré l’assembly .Net (C #) compilé et l’ai référencé dans le projet VB6.

J’ai cependant trouvé ces deux pages, ce qui semblait être ce dont nous avions besoin, mais c’est une solution pour appeler une dll .NET (c #) générée à l’aide de VS2005. Cela ne semble pas fonctionner lorsque la dll .NET (C #) a été générée à l’aide de VS2010.

site1 site2

Si quelqu’un pouvait donner des suggestions ou me diriger quelque part, je pourrais en avoir une, ce serait génial.

Merci

SOLUTION Grâce à @HansPassant, j’ai trouvé la solution. Pour déboguer un projet VB6 contenant un assemblage C # .NET, vous devez enregistrer la DLL .NET via ” regasm ” et ” gacutil “, puis assurez-vous de fermer et de rouvrir l’application VB6 avant de commencer le débogage.

Ce n’est pas un problème, VB6 utilise son propre débogueur qui ne gêne aucun autre débogueur, y compris celui géré pour le code C #.

Vous commencez à partir de votre projet de bibliothèque de classe C #, assurez-vous qu’il est sélectionné comme projet de démarrage. Projet + Propriétés, onglet Débogage. Sélectionnez l’option “Démarrer programme externe” et entrez le chemin d’access à l’IDE VB6. En règle générale, c: \ programmes \ microsoft visual studio \ vb98 \ vb6.exe. Définissez un point d’arrêt sur la méthode que vous souhaitez déboguer.

Appuyez sur F5 et l’idéal VB6 commencera à courir. Chargez ou créez votre projet vb6. Notez comment vous pouvez append le chemin d’access au projet .vbp à l’étape précédente pour qu’il charge automatiquement votre projet.

Commencez à déboguer votre projet vb6 comme d’habitude. Dès qu’il commence à utiliser votre classe C # [ComVisible], votre assemblage C # est chargé. Et le point d’arrêt basha lorsque votre code vb6 appelle la méthode. Basculer au besoin. Notez que vous ne pouvez pas passer du code vb6 au code C # en une seule étape, vous devez définir des points d’arrêt pour que le débogueur s’arrête.

Ah, les merveilles de l’utilisation de .NET à partir de VB6 de manière débogable.

  • dans les options de compilation du projet VB6 (accessibles à l’aide du bouton Options de la boîte de dialog Créer un projet), choisissez les options Comstackr en code natif , Aucune optimisation et Créer des informations de débogage symboliques . Puis comstackz votre projet VB6. Ces options permettent un mappage correct binary VB6 vers la source.
  • Accédez à la page de propriétés de Propriétés de configuration … Débogage de votre solution et modifiez l’ action de démarrage pour lancer l’exécutable VB6.
  • Dans VS Solution Explorer, sélectionnez Fichier … Ajouter un élément existant et naviguez jusqu’au dossier contenant le code source VB6 que vous souhaitez déboguer. Double-cliquez sur le fichier de code source VB6 que vous souhaitez déboguer. Une fenêtre source devrait s’ouvrir dans VS pour vous permettre de définir des points d’arrêt dans le code source VB6.
  • Assurez-vous que votre bibliothèque .NET a un constructeur par défaut public. Ce qui est essentiel.
  • Définissez également les points d’arrêt C # dont vous avez besoin. Ne pas entrer dans le code .NET – cela ne fonctionne pas.
  • Lorsque vous démarrez le débogage avec VS, vos points d’arrêt VB6 et C # doivent être atteints normalement.

Vous ne pouvez pas déboguer à la fois (facilement) et passer du code VB6 au code C #. Vous pouvez cependant déboguer chacun individuellement.

Le débogage du code VB6 peut être effectué dans l’EDI après avoir compilé la DLL C # et l’ajouté en tant que référence au projet VB6.

Le débogage de la DLL avec l’hôte VB6 est possible dans Visual Studio en compilant le projet VB6 et en l’utilisant dans les propriétés du projet comme exécutable.

Malheureusement, cela nécessitera au moins le cadre de travail préalable.