Pytanie Aplikacja Win32 Console a konsola CLR


Pracuję nad projektem C ++, którego nie zamierzam rozwijać ani wdrażać przy użyciu bibliotek lub narzędzi .NET, co oznacza, że ​​byłoby sensowne tworzenie go przy użyciu aplikacji Visual Studio Win32 Console. Słyszałem jednak, że umiejętności debugowania podczas używania aplikacji CLR w Visual Studio są znacznie potężniejsze. Mam więc kilka pytań:

  1. Czy to prawda, że ​​posiadanie aplikacji CLR w porównaniu z aplikacją Win32 zwiększa możliwości twojego procesu rozwoju, nawet jeśli nie korzystasz z bibliotek .NET lub innych zasobów?

  2. Jeśli tak, to czy nadal będę w stanie opracować / skompilować projekt jako projekt CLR, aby wykorzystać te zalety, mimo że opracowywałbym czysty projekt w C ++ przy użyciu STL itp. I nie korzystał z żadnej funkcjonalności .NET? Czy też taki projekt wymagałby fundamentalnych różnic, które sprawiłyby, że powrót do niego nie byłby banalny, co oznacza, że ​​powinienem trzymać się aplikacji konsolowej Win32?


21
2018-06-20 17:27


pochodzenie




Odpowiedzi:


Odpowiedź dolna, jeśli nigdy nie zamierzasz używać CLR lub jakichkolwiek obiektów .Net w swojej aplikacji, po prostu użyj normalnej biblioteki Win32 C ++. Wykonanie czegokolwiek innego spowoduje ból na drodze.

Teraz, aby odpowiedzieć na oryginalne pytanie dotyczące debugowania, tak debugowanie z CLR ma pewne zalety w porównaniu do debugowania normalnej aplikacji C ++. Począwszy od wersji Visual Studio 2005, zarówno C #, jak i VB.Net zaczęły koncentrować się na zwiększeniu wartości wyświetlania zmiennych w oknie locals / autos / watch. Dokonano tego głównie poprzez wprowadzenie atrybutów .Net, takich jak DebuggerDisplay, DebuggerTypeProxy i framework wizualizacyjny.

Jeśli jednak nie używasz żadnych typów .Net, nie dostaniesz żadnej z tych korzyści.

Ekspresator wyrażeń C ++ nie korzysta z żadnego z nich. Ma własne metody dostosowywania wyświetlania typu. Ale nie jest tak funkcjonalny (lub potencjalnie niebezpieczny) jak styl atrybutu, ponieważ nie pozwala na uruchamianie kodu w procesie debugee.

Nie oznacza to, że debugowanie C ++ zapewnia słabe wrażenia. Jest po prostu inny i istnieją lepsze ekrany dla wielu typów kontenerów STL.

Debugowanie aplikacji CLR ma również pewne wady. Na przykład debugowanie zoptymalizowanego kodu jest czasami prawie niemożliwe, ponieważ JITer ukryje lokalne zmienne, parametry i często "to". Debugowanie podobnie skonstruowanej aplikacji w C ++ może być frustrujące, ale zawsze możesz złapać rejestry i zignorować, aby zobaczyć, co się dzieje. Zrobienie tego samego dla aplikacji CLR jest w najlepszym wypadku trudne.


25
2018-06-20 17:35



Wielkie dzięki za szczegółową odpowiedź! Zastanawiałem się, czy mógłbyś nieco rozwinąć swoje pierwsze oświadczenie i wyjaśnić, jakie problemy mogą pojawić się na dłuższą metę? Czy to w większości przypadkowo za pomocą obiektów / funkcji .NET, po ich kompilacji dobrze, a następnie konieczności zmiany tych fragmentów kodu głęboko osadzone w aplikacji później? - bsofman
@bsofman, zasadniczo tak. Aby zarówno skorzystać z CLR i wdrożyć bez CLR potrzebujesz 2 konfiguracji kompilacji (po jednej dla każdego). Różnice między językami pojawiałyby się w błędach kompilacji w jednej konfiguracji, ale nie w drugiej, co ostatecznie może być irytujące - JaredPar


Myślę, że kompilowanie natywnego kodu C ++ do CLR otwiera całą puszkę robaków. Jeśli nie masz dużych inwestycji na istniejący kod C ++ i konieczność uruchomienia kodu z zarządzanymi typami, jest to coś, czego chcesz uniknąć.

Na przykład C ++ / CLI jest jednym ze sposobów łączenia natywnego kodu C ++ bezpośrednio w zespół CLR, ale C ++ / CLI dodaje niestandardową składnię do języka C ++, a używanie natywnych typów C ++ zmieszanych z zarządzanymi typami wydaje się bardzo trudnym zagadnieniem. najmniej.

Podsumowując, zachowałbym go jako natywną aplikację. Jeśli masz jakiś plan przeniesienia go do CLR i właśnie zacząłeś pracować nad tym projektem, poważnie pomyślałbym o rozpoczęciu pisania w języku ojczystym CLR, takim jak C #.


2
2018-06-21 04:05



C ++ CLI jest przerażające! - toto


Ta odpowiedź została skopiowana tutaj - http://social.msdn.microsoft.com/Forums/vstudio/en-US/895ecb47-8b34-4a1a-a20b-fda1e5e576eb/whats-the-difference-between-clr-console-application-and-win32-console- podanie

Jaka jest różnica między aplikacją konsoli CLR a aplikacją konsoli win32? - Pierwsza z nich korzysta z Common Language Runtime (innymi słowy, .NET framework); ten drugi nie.

i nie mogę używać Systemu przestrzeni nazw w modelu aplikacji konsoli win32.  - Przestrzeń nazw systemu jest częścią platformy .NET.

Co powinienem zrobić, gdy chcę korzystać z przestrzeni nazw? - Powinieneś napisać aplikację .NET.

i Czy nie ma wskazówki wejściowej, takich jak w modelu C #? - W istocie nie ma IntelliSense dla C ++ / CLI w istniejących wersjach Visual Studio. Jeśli chcesz aplikacji .NET, C # może być lepszym wyborem języka.


1
2018-02-04 22:54