Question

Je travaille sur un projet C ++ que je n'ai pas l'intention de développer ou de déployer à l'aide de bibliothèques ou d'outils .NET, ce qui signifie qu'il serait logique pour moi de le créer à l'aide d'une application Visual Studio Win32 Console. Cependant, j'ai entendu dire que les capacités de débogage lors de l'utilisation d'une application CLR sous Visual Studio sont beaucoup plus puissantes. J'ai donc quelques questions:

  1. Est-il vrai qu'avoir une application CLR ou une application Win32 ajoute des fonctionnalités à votre processus de développement même si vous n'utilisez pas de bibliothèques .NET ou d'autres ressources?

  2. Si oui, serais-je toujours en mesure de développer / compiler le projet en tant que projet CLR pour en tirer parti, même si je développerais un projet pur en C ++ à l'aide de STL, etc. sans en tirer parti toute fonctionnalité .NET? Ou bien un tel projet nécessiterait-il des différences fondamentales qui rendraient non-trivial le retour en arrière, ce qui signifie que je devrais rester avec une application pour console Win32?

Était-ce utile?

La solution

En bout de ligne, si vous n’avez jamais l’intention d’utiliser le CLR ou un objet .Net de votre application, utilisez simplement une bibliothèque Win32 C ++ normale. Faire autre chose vous fera souffrir plus tard.

Maintenant, pour répondre à la question initiale sur le débogage, oui, le débogage avec le CLR présente certains avantages par rapport au débogage d’une application C ++ normale. À partir de Visual Studio 2005, C # et VB.Net ont tous deux commencé à s’employer à rendre l’affichage des variables dans la fenêtre locaux / autos / watch beaucoup plus précieux. Cela a été fait principalement par l'introduction d'attributs .Net tels que DebuggerDisplay, DebuggerTypeProxy et la structure du visualiseur.

Si vous n'utilisez aucun type .Net, vous n'obtiendrez aucun de ces avantages.

L'évaluateur d'expression C ++ ne tire parti d'aucun de ces avantages. Il a ses propres méthodes de personnalisation de l'affichage de type. Mais ce n'est pas aussi caractéristique (ou potentiellement dangereux) que le style d'attribut car il ne permet pas au code de s'exécuter dans le processus debugee.

Cela ne veut pas dire que le débogage C ++ fournit une expérience médiocre. C'est simplement différent et il existe de meilleurs affichages pour de nombreux types de conteneurs STL.

Le débogage d’une application CLR présente également certains inconvénients. Par exemple, le code optimisé pour le débogage est presque impossible parfois, car JIT cachera des variables locales, des paramètres et souvent "cela". Déboguer une application C ++ construite de la même manière peut également être frustrant, mais vous pouvez toujours saisir les registres et les dissocier pour voir ce qui se passe. Faire la même chose pour une application CLR est difficile au mieux.

Autres conseils

Je pense que la compilation de code C ++ natif dans CLR ouvre toute une boîte de Pandore. Si vous ne souhaitez pas investir beaucoup dans le code C ++ existant et si vous avez besoin d'exécuter le code avec des types gérés, vous devez éviter cela.

Par exemple, C ++ / CLI est un moyen de regrouper du code C ++ natif directement dans un assemblage CLR, mais C ++ / CLI ajoute une syntaxe non standard au langage C ++, et l'utilisation de types C ++ natifs mélangés à des types gérés semble être très délicate. question à dire le moins.

Donc, en conclusion, je voudrais juste le garder comme une application native. Si vous avez l’intention de le transférer dans CLR et que vous venez de commencer à travailler sur ce projet, je pense sérieusement à commencer à écrire dans un langage natif du CLR tel que C #.

Cette réponse copiée à partir d'ici - http://social.msdn.microsoft.com/Forums/vstudio/en-US/895ecb47-8b34-4a1a-a20b- fda1e5e576eb / Quelle-est-la-différence-entre-application-console-clr et application-console-win32

Quelle est la différence entre une application console CLR et une application console Win32? - Le premier utilise Common Language Runtime (en d’autres termes, le framework .NET); ce dernier ne le fait pas.

et je ne peux pas utiliser le système d'espaces de noms sous le modèle d'application de la console win32. - L'espace de noms système fait partie du .NET Framework.

Que dois-je faire lorsque je veux utiliser l'espace de noms? - Vous devriez écrire une application .NET.

et n'a-t-il pas un indice de saisie comme dans le modèle C #? - Il n'y a en effet pas d'IntelliSense pour C ++ / CLI dans les versions existantes de Visual Studio. Si vous voulez une application .NET, C # pourrait être un meilleur choix de langue.

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