Application Console Win32 vs Console CLR app

je travaille sur un projet C++ que je n'ai pas l'intention de développer ou de déployer en utilisant des bibliothèques ou des outils .NET, ce qui signifie qu'il serait logique pour moi de le créer en utilisant une application de console Win32 de Visual Studio. 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 que le fait d'avoir une application CLR par rapport à une application Win32 ajoute des capacité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 encore capable de développer/compiler le projet en tant que projet CLR pour en profiter même si je développerais un projet C++ pur en utilisant STL, etc. et ne pas profiter des fonctionnalités .NET? Ou un tel projet nécessiterait-il des différences fondamentales qui rendraient non trivial de revenir en arrière, ce qui signifie que je devrais coller avec une application de console Win32?

21
demandé sur Sam 2009-06-20 21:27:14

3 réponses

réponse au bout du compte, si vous n'avez jamais l'intention d'utiliser les objets CLR ou .Net dans votre application, utilisez simplement une bibliothèque Win32 c++ normale. Faire quoi que ce soit d'autre vous causera de la peine sur la route.

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 a commencé à se concentrer sur la réalisation de l'affichage variable dans les locaux /autos / regarder la fenêtre beaucoup plus de valeur. Cela s'est fait principalement par l'introduction d'attributs .Net tels que DebuggerDisplay, DebuggerTypeProxy et le cadre visualiseur.

si vous n'utilisez pas les types .Net, vous n'obtiendrez aucun de ces avantages.

l'évaluateur d'expressions en C++ ne profite d'aucune de ces options. Il a ses propres méthodes de personnalisation de l'affichage de type. Mais ce n'est pas aussi featureful (ou potentiellement dangereux) que l'attribut style parce qu'il ne permet pas pour que le code s'exécute dans le processus de débugee.

cela ne veut pas dire que déboguer C++ offre une mauvaise expérience. Il est simplement différent et il ya de meilleurs affichages pour de nombreux types de conteneurs STL.

déboguer une application CLR a aussi certains inconvénients. Par exemple, déboguer du code optimisé est presque impossible à certains moments parce que le JITer cache des variables locales, des paramètres et souvent "ceci". Déboguer une application C++ construite de la même façon peut aussi être frustrant, mais vous pouvez toujours prendre les registres et dissamebly pour voir ce qui se passe. Faire la même chose pour une application CLR est difficile au mieux.

25
répondu JaredPar 2009-06-20 17:35:02

je pense que compiler du code C++ natif dans CLR ouvre une boîte entière de vers. A moins que vous n'ayez un gros investissement sur le code C++ existant et une certaine nécessité d'exécuter le code avec des types gérés, c'est quelque chose que vous voulez éviter.

par exemple, C++ / CLI est une façon de regrouper le code natif C++ dans un ensemble CLR, mais C++ / CLI ajoute une syntaxe non standard au langage C++, et l'utilisation de types natifs c++ mélangés avec des types gérés semble être une question très délicate pour dire moins.

donc, en conclusion, je le garderais comme une application native. Si vous avez n'importe quel plan de le porter à CLR et que vous avez juste commencé à travailler sur ce projet, je penserais sérieusement de commencer à écrire dans un CLR-langue maternelle comme C#.

2
répondu Kei 2009-06-21 16:32:54

Cette réponse copié à partir d'ici - http://social.msdn.microsoft.com/Forums/vstudio/en-US/895ecb47-8b34-4a1a-a20b-fda1e5e576eb/whats-the-difference-between-clr-console-application-and-win32-console-application

Quelle est la différence entre l'application CLR console et l'application win32 console? - Le premier utilise un langage courant (en D'autres termes, .net framework); le second non.

et je ne peux pas utiliser namespace Système sous le modèle d'application de la console win32. - System namespace fait partie de .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 des indices d'entrée 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.

1
répondu Steam 2014-02-04 22:54:51