Консольное приложение Win32 против консольного приложения CLR

StackOverflow https://stackoverflow.com/questions/1022072

Вопрос

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

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

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

  • Это было полезно?

    Решение

    Ответ в нижней строке: если вы никогда не собираетесь использовать 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 будет скрывать локальные переменные, параметры и часто «this». Отладка аналогично созданного приложения C ++ также может быть разочаровывающей, но вы всегда можете взять регистры и разобраться, чтобы увидеть, что происходит. Делать то же самое для приложения CLR в лучшем случае сложно.

    Другие советы

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

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

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

    Этот ответ скопирован отсюда - http://social.msdn.microsoft.com/Forums/vstudio/en-US/895ecb47-8b34-4a1a-a20b- fda1e5e576eb / Что-разностного-между-CLR-консольные приложения и-win32-консольное приложение

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

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top