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

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

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

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

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

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

Ответы [ 5 ]

66 голосов
/ 04 мая 2009

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

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

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

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

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

20 голосов
/ 04 мая 2009

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

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

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

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

13 голосов
/ 04 мая 2009

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

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

Больше в WTL здесь:

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

8 голосов
/ 04 мая 2009

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

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

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

4 голосов
/ 05 мая 2009

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

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

...