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

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

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

- Это среда CLR плохой идея!--2-->?

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

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

5 ответов


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

использование среды 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, а скорее улучшение - он делает много тяжелой работы для вас.


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

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

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

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


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

чтобы немного уточнить, посмотрите на ссылку, которую вы дали, описывая C++ CLR. Лучшие ответы (на мой взгляд, точно), что 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, которые, возможно, вам стоит изучить.