Как я могу решить, следует ли использовать ATL, MFC, Win32 или CLR для нового проекта C++?
Я только начинаю свой первый проект на C++. Я использую Visual Studio 2008. Это одноформное приложение Windows, которое обращается к нескольким базам данных и инициирует транзакцию WebSphere MQ. Я в основном понимаю различия между ATL, MFC, Win32 (я немного туманен на этом самом деле) и CLR, но я в недоумении относительно того, как я должен выбрать.
есть ли один или несколько из них только для обратной совместимости?
Это CLR плохая идея?
любой предложения приветствуются.
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 здесь:
Мне было бы очень любопытно, почему вы вообще делаете это в C++. Основываясь на вашем кратком описании, C# звучит как гораздо более подходящий выбор.
чтобы немного уточнить, посмотрите на ссылку, которую вы дали, описывая C++ CLR. Самый рейтинговый ответ отмечает (точно, на мой взгляд), что C++ подходит для "ядра, игр, высокопроизводительных и серверных приложений"-ни один из которых, похоже, не описывает то, что вы делаете.
МФЦ, АТЛ и т. д. будут поддерживаться в смысл в том, что да, вы сможете скомпилировать свое приложение в будущих версиях Visual Studio и запускать их в будущих версиях Windows. Но они не поддерживаются в том смысле, что в API или языке не так много новых разработок, как в среде CLR и C#.
нет ничего плохого в CLR. Как и другие здесь, я бы предложил C#, но поскольку у вас есть причины придерживаться C++, то использование .NET framework в несколько тысяч раз проще, чем возиться с ATL/MFC, если вы еще не знакомы с ними (IMO).
возможно, стоит упомянуть, что если вы используете C++/CLR, то вы вообще не используете C++. C++ / CLR компилируется в CIL так же, как и C#. Я никогда не использовал его сам, но я считаю, что его цель-позволить вам скомпилировать наследие код и сделать его легко доступным для нового кода .NET, а не позволить новому коду работать со старыми исполняемыми файлами C++. Есть и другие методы вызова машинного кода из .NET, которые, возможно, вам следует изучить.
Comments