Как я могу решить, использовать ли ATL, MFC, Win32 или CLR для нового проекта на С++?

Я только начинаю свой первый проект на С++. Я использую Visual Studio 2008. Это одноформатное приложение Windows, которое обращается к нескольким базам данных и инициирует транзакцию WebSphere MQ. Я в основном понимаю различия между ATL, MFC, Win32 (я немного туман на самом деле) и CLR, но я в недоумении относительно того, как я должен выбирать.

Есть ли один или несколько из них для обратной совместимости?

Является CLR плохая идея?

Любые предложения оценены.

Edit: Я выбрал С++ для этого проекта по причинам, по которым я не заходил в этот пост, которые не являются полностью техническими. Итак, если предположить, что С++ является единственным/лучшим вариантом, который я должен выбрать?

Ответ 1

Это зависит от ваших потребностей.

Использование CLR предоставит вам наиболее выразительный набор библиотек (всю платформу .NET) за счет ограничения вашего исполняемого файла требованием установки .NET Framework во время выполнения, а также ограничения на использование Windows (однако, все 4 перечисленные технологии - только окна, поэтому ограничение платформы, вероятно, является наименее проблематичным).

Однако для CLR требуется использовать расширения С++/CLI для языка С++, поэтому вам необходимо изучить некоторые дополнительные языковые функции, чтобы использовать это. Это дает вам много "дополнительных функций", таких как доступ к библиотекам .net, полная сборка мусора и т.д.

ATL и MFC несколько сложнее решить. Я хотел бы отнести вас к странице MSDN для выбора, чтобы решить между ними. Самое приятное в ATL/MFC заключается в том, что вам не нужна платформа .NET, но для развертывания должны быть установлены только среды исполнения VC/MFC.

Использование Win32 напрямую предоставляет наименьшие исполняемые файлы с наименьшими зависимостями, но больше работает над записью. У вас есть меньше всего вспомогательных библиотек, поэтому вы пишете больше кода.

Ответ 2

Win32 - это простой, простой способ сделать это. Это утомительно, сложно в использовании и содержит много мелких деталей, которые вам нужно запомнить, иначе все будет не так загадочно.

MFC основывается на Win32, чтобы предоставить вам объектно-ориентированный способ создания приложения. Это не замена для Win32, а скорее усовершенствование - он делает много работы для вас.

System.Windows.Forms(что я предполагаю, что вы подразумеваете под CLR) полностью отличается, но имеет большое сходство с MFC из его базовой структуры. Это, безусловно, самый простой в использовании, но требует платформы .NET, которая может быть или не быть помехой в вашем случае.

Моя рекомендация: если вам нужно избегать .NET, то используйте MFC, иначе используйте .NET(на самом деле, в этом случае я бы использовал С#, поскольку с ним гораздо проще работать).

Ответ 3

Что касается С++, я бы использовал WTL. Это легко, и у вас будет мало (если есть) зависимостей, что упростит отправку и установку. Я нахожу это очень приятным, когда мое приложение состоит из одного EXE, который будет работать в большинстве версий Windows, но это может не беспокоить вас.

Если вы решите пойти .NET вместо этого, то С# почти наверняка будет идти.

Подробнее в WTL здесь:

http://www.codeproject.com/KB/wtl/wtl4mfc1.aspx

Ответ 4

Мне было бы очень любопытно, почему вы вообще делаете это на С++. Основываясь на вашем кратком описании, С# кажется гораздо более подходящим выбором.

Чтобы немного разобраться, посмотрите на ссылку, которую вы дали, описывая С++ CLR. Самые популярные ответы на вопросы (точнее, на мой взгляд), что С++ подходит для "ядра, игр, высокопроизводительных и серверных приложений" - ни одна из них, похоже, не описывает, что вы делаете.

MFC, ATL и т.д. будут поддерживаться в том смысле, что да, вы сможете скомпилировать свое приложение в будущих версиях Visual Studio и запустить их в будущих версиях Windows. Но они не поддерживаются в том смысле, что в API или языке не так много нового развития, как в CLR и С#.

Ответ 5

В CLR нет ничего плохого. Как и другие, я предлагаю С#, но поскольку у вас есть причины придерживаться С++, то использование .NET framework в несколько тысяч раз проще, чем возиться с ATL/MFC, если вы еще не знакомы с ними (IMO).

Возможно, стоит упомянуть, что если вы используете С++/CLR, вы вообще не используете С++. С++/CLR компилируется в CIL так же, как С#. Я никогда не использовал его сам, но я считаю, что его цель - дать вам возможность компилировать устаревший код и сделать его доступным для нового .NET-кода, а не разрешать работу нового кода со старыми исполняемыми файлами С++. Существуют и другие методы вызова собственного кода из .NET, который, возможно, вам следует изучить.