Консольное приложение Win32 против консольного приложения CLR - PullRequest
21 голосов
/ 20 июня 2009

Я работаю над проектом C ++, который я не собираюсь разрабатывать или развертывать с использованием библиотек или инструментов .NET, что означает, что для меня было бы целесообразно создать его с помощью консольного приложения Visual Studio Win32. Однако я слышал, что возможности отладки при использовании приложения CLR в Visual Studio гораздо более мощные. Итак, у меня есть несколько вопросов:

  1. Правда ли, что наличие приложения CLR вместо приложения Win32 добавляет возможности в процесс разработки, даже если вы не используете библиотеки .NET или другие ресурсы?

  2. Если это так, смогу ли я по-прежнему разрабатывать / компилировать проект как проект CLR, чтобы использовать их в своих интересах, даже если бы я разрабатывал проект на чистом C ++ с использованием STL и т. Д. И не использовал бы преимущества любая функциональность .NET? Или такой проект потребует фундаментальных отличий, которые сделают его нетривиальным, чтобы вернуться назад, то есть я должен придерживаться консольного приложения Win32?

Ответы [ 3 ]

25 голосов
/ 20 июня 2009

Ответ в нижней строке: если вы никогда не собираетесь использовать CLR или какие-либо объекты .Net в своем приложении, просто используйте обычную библиотеку Win32 C ++. Делая что-нибудь еще, вы почувствуете боль в будущем.

Теперь, чтобы ответить на первоначальный вопрос об отладке, да, отладка с помощью CLR имеет определенные преимущества по сравнению с отладкой обычного приложения C ++. Начиная с Visual Studio 2005, и C #, и VB.Net начали концентрироваться на том, чтобы сделать отображение переменных в окне locals / autos / watch гораздо более ценным. Это было сделано главным образом посредством введения атрибутов .Net, таких как DebuggerDisplay, DebuggerTypeProxy и среды визуализатора.

Если вы не используете какие-либо типы .Net, вы не получите ни одно из этих преимуществ.

Средство оценки выражений C ++ не использует ни одного из них. У него есть свои методы настройки отображения типов. Но он не такой функциональный (или потенциально опасный), как стиль атрибута, потому что он не позволяет запускать код в процессе debugee.

Это не значит, что отладка C ++ дает плохой опыт. Это просто отличается, и есть лучшие отображения для многих типов контейнеров STL.

Отладка приложения CLR также имеет определенные недостатки. Например, отладка оптимизированного кода иногда практически невозможна, потому что JITer будет скрывать локальные переменные, параметры и часто «это». Отладка аналогично созданного приложения C ++ также может быть разочаровывающей, но вы всегда можете взять регистры и разобраться, чтобы увидеть, что происходит. Делать то же самое для приложения CLR в лучшем случае сложно.

2 голосов
/ 21 июня 2009

Я думаю, что компиляция собственного кода C ++ в CLR открывает целую банку червей. Если у вас нет больших инвестиций в существующий код C ++ и нет необходимости запускать код с управляемыми типами, этого вам следует избегать.

Например, C ++ / CLI - один из способов связать собственный код C ++ прямо в сборку CLR, но C ++ / CLI добавляет нестандартный синтаксис к языку C ++, и использование собственных типов C ++, смешанных с управляемыми типами, кажется очень сложным вопрос по меньшей мере.

Итак, в заключение я бы оставил его как собственное приложение. Если у вас есть какой-либо план по его переносу в CLR, и вы только начали работать над этим проектом, я бы серьезно подумал о том, чтобы начать писать на родном языке CLR, например C #.

1 голос
/ 05 февраля 2014

Этот ответ скопирован отсюда - 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

В чем разница между консольным приложением CLR и консольным приложением win32? - Первый использует Common Language Runtime (другими словами, .NET Framework); последний нет.

и я не могу использовать систему имен пространства в модели консоли приложения win32. - Пространство имен системы является частью .NET Framework.

Что мне делать, если я хочу использовать пространство имен? - Вам следует написать приложение .NET.

и нет ли у него подсказки ввода, такой как в модели C #? - В существующих версиях Visual Studio действительно нет IntelliSense для C ++ / CLI. Если вы хотите приложение .NET, C # может быть лучшим выбором языка.

...