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

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

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Существует ли один или несколько из них только для обеспечения обратной совместимости?

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

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

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

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

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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