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

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

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

CLR - плохая идея?

Любые предложения приветствуются.

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


person John M Gant    schedule 04.05.2009    source источник


Ответы (5)


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

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

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

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

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

person Reed Copsey    schedule 04.05.2009

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

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

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

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

person arke    schedule 04.05.2009
comment
Этот комментарий все еще актуален? - person Janus Troelsen; 03.08.2016
comment
Для Visual Studio 2008, наверное, сейчас уже десять лет. В наши дни для Windows гораздо лучше использовать WPF. - person arke; 23.09.2017

Что касается C ++, я бы использовал WTL. Он легкий, и у вас будет мало (если таковые имеются) зависимостей, что упрощает доставку и установку. Мне очень приятно, когда мое приложение состоит из одного EXE-файла, который будет работать в большинстве версий Windows, но это может не беспокоить вас.

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

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

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

person Rob    schedule 04.05.2009
comment
Вы бы по-прежнему использовали WTL? На 2016 год пока нет коммитов. Источник: SVN - person Janus Troelsen; 03.08.2016
comment
@JanusTroelsen Я бы стал! Последний релиз 18 марта 2020 года - версия 10.1077! sourceforge.net/projects/wtl/files/WTL%2010 /WTL%2010.0.10077 - person fabspro; 16.09.2020

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

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

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

person Clyde    schedule 04.05.2009
comment
Хороший вопрос. Это часть более крупного проекта, который включает некоторые другие части, которые должны быть на C ++ по причинам, связанным с наследием и производителями. Эта часть не должна быть на C ++, но поскольку есть другие части, которые есть, и поскольку эта часть относительно мала, я планировал сделать все это на том же языке. - person John M Gant; 04.05.2009
comment
C ++ / CLI (/ clr) может быть очень близок к C #, если вам нравится работать с C #, но вы хотите / должны использовать C ++. Основное отличие заключается в некоторых незначительных особенностях синтаксиса и попытке избежать использования стандартного C ++ вместо вызовов CLI. На самом деле нет причин избегать этого. - person Reed Copsey; 04.05.2009
comment
И это не обязательно плохой мыслительный процесс. Однако я по-прежнему считаю, что лучше всего перейти на C # и использовать P / Invoke в существующих библиотеках. Если бы вы были уже гуру MFC, и это было лишь небольшим дополнением к вашему проекту, тогда да, вероятно, имело бы смысл продолжить работу на C ++. Хотя даже в этом случае это может быть хорошей возможностью выкроить время для практики с .NET framework. - person Clyde; 04.05.2009
comment
@Clyde: Мой опыт показывает, что со слоем взаимодействия C ++ гораздо приятнее работать и он намного выразительнее, чем попытки P / Invoke. Если вы работаете с другим кодом C ++, я лично использую C ++ / CLI для выполнения всего взаимодействия. Если уровень графического интерфейса большой, я бы, вероятно, использовал C # - если бы это был небольшой проект, я бы, вероятно, просто сохранил все это на C ++ / CLI. C ++ отлично работает с .NET framework - точно так же, как C # (есть несколько вещей, которые сложнее в C ++, но некоторые вещи НАМНОГО проще в C ++, чем в C # при работе с .NET). - person Reed Copsey; 05.05.2009

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

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

person Patrick    schedule 04.05.2009
comment
Если мне нужно использовать библиотеку .NET, я лучше напишу на C # - person Tuyen Pham; 12.05.2015