Как да реша дали да използвам 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 рамката да бъде инсталирана по време на изпълнение, както и ограничаването ви до платформата Windows ( въпреки това всичките 4 изброени технологии са само за Windows, така че ограничението на платформата вероятно е най-малко обезпокоително).

CLR обаче изисква да използвате C++/CLI разширенията на езика C++, така че по същество ще трябва да научите някои допълнителни езикови функции, за да използвате това. Това ви дава много „екстри“, като достъп до .net библиотеките, пълно събиране на боклука и т.н.

ATL и MFC са малко по-трудни за избор между. Бих ви препратил към страницата на MSDN за избор за да вземе решение между тях. Хубавото на ATL/MFC е, че не се нуждаете от .NET framework, а само от VC/MFC runtimes, които да бъдат инсталирани за внедряване.

Използването на Win32 директно предоставя най-малките изпълними файлове, с най-малко зависимости, но е повече работа за писане. Имате най-малко помощни библиотеки, така че пишете повече от кода.

person Reed Copsey    schedule 04.05.2009

Win32 е суровият, чист начин за това. Той е досаден, труден за използване и има много малки детайли, които трябва да запомните, в противен случай нещата ще се провалят по сравнително мистериозни начини.

MFC се основава на Win32, за да ви предостави обектно-ориентиран начин за изграждане на вашето приложение. Това не е заместител на Win32, а по-скоро подобрение - върши голяма част от тежката работа вместо вас.

System.Windows.Forms (което предполагам, че имате предвид под CLR) е напълно различно, но има големи прилики с MFC от основната му структура. Той е най-лесният за използване, но изисква .NET рамка, която може или не може да бъде пречка във вашия случай.

Моята препоръка: Ако трябва да избягвате .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, за да направя цялото взаимодействие. Ако GUI слоят е голям, вероятно бих използвал 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