# Visual C++: Unterschied ATL, MFC, Win32



## Cerberus (4 Oktober 2010)

Hallo,

Kann mir jemand in einfachen Worten den Unterschied
zwischen einem ATL-Projekt, einer MFC-Anwendung
und einem Win32-Projekt erklären?

Gruß Cerberus


----------



## pvbrowser (4 Oktober 2010)

In Visual C++ gibt es ein paar Vorlagen als Startpunkt für eigene Anwendungen.

Win32 Projekte haben erst mal keine graphische Oberfläche aber man kann das Win32 API nutzen.

MFC Projekte binden die MS Foundation Classes mit ein. Also die Klassen für klassische graphische Anwendungen unter Windows. MFC gilt inzwischen als veraltet. Unter .NET wird auf Windows Forms gesetzt.
http://de.wikipedia.org/wiki/Windows_Forms

ATL ist zur Programmierung von COM und ActiveX
http://de.wikipedia.org/wiki/Active_Template_Library

PS: Ich persönlich verwende heute keine dieser API's mehr, weil alles immer nur unter Windows funktioniert. Ich setze statt dessen Qt ein.
http://qt.nokia.com/
Damit ist es möglich mit EINEM Quelltext alle gängigen Betriebssysteme abzudecken.


----------



## RobiHerb (5 Oktober 2010)

*Ein wenig Ergänzung noch ...*

Wie schon gesagt, man hat über die Jahre das Leben sich vereinfacht.

Ganz unten liegt die WIN API, die kann "Alles" und wenn man echt tricki arbeiten muss (nicht gerade auf Assembler Ebene runter muss), dann gehts über die API. Die API wurde ca. 1982 festgelegt und bis auf dem Wechsel von 16 Bi8t auf 32 Bit ist sie im Prinzip stabil geblieben über den Lebenszyklus von Windows. Das ist für jemanden, der langlebige Produkte hat sehr wichtig.

Darüber hat Microsoft mit der MFC (ca.1990) für die Abdeckung der meisten Fälle eine Objekt Library gelegt (C++), die ein einfacheres Programmieren zulässt. Die MFC greift auf die API zu und das Schöne dabei ist, Microsoft hat den Source Code dazu gelegt mit der Entwicklungs Umgebung. Somit hat man auch keine unlösbaren Probleme, wenn man mal nach Jahren ein altes Projekt wieder pflegen und auf den aktuellen Windows Stand bringen darf.

Active X und COM (ca.1998 MVS 6.0) sind geniale Entwicklungen aber wohl in Verruf gekommen mit Virenschleudern etc. Auch nicht so simpel zu programmieren und auch undurchsichtig, wenn man in echte Probleme gerät. Wer es kann oder konnte hat damit nicht schlecht Geld verdient.

.NET (ab ca.2003) ist noch genialer, absolut effektiv zu handeln, wenn man die MS Entwicklungsumgebungen hat aber eine reine Microsoft Sache. Die C# Sprache ebenfalls gehört ihnen, die Sourcen der Libs sind "Staatsgeheimnis" und alle 2 Jahre crasht erst einmal alles, wenn eine neue Version rauskommt. Auch FORMS ist inzwischen nicht mehr aktuell, WPF ist ein komplett neues Programmier Paradigma. Was in 10 Jahren aktuell sein wird, wer weiss? Wie beim PC schon üblich, soll man halt alle 2 Jahre oder so was neues machen!!!! Das passt schlecht zu unserer Branche.

QT ist soweit ich weiss auch nicht mehr so ganz frei wie am Anfang, hier hat die Firma Oracle oder Nokia alle Rechte übernommen und möchte damit nicht nur die Welt glücklich machen.$$$$

Ich habe mal kurz Qt gemacht als Alternative zu Java und Eclipse ausprobiert aber dann sehr schnell vom Kunden lernen müssen, man macht .NET/WPF, wenn man Geld verdienen möchte. Und wer wechselt schon von Windows auf Linux aufs Handy auf die SPS jeden Tag, um ein universelles Source Code Paket zu haben


----------



## pvbrowser (5 Oktober 2010)

RobiHerb schrieb:


> QT ist soweit ich weiss auch nicht mehr so ganz frei wie am Anfang, hier hat die Firma Oracle oder Nokia alle Rechte übernommen und möchte damit nicht nur die Welt glücklich machen.$$$$



Das stimmt so nicht, Nokia hat Qt inzwischen sogar unter LGPL gestellt.
Man kann damit also auch kommerzielle Anwendungen bauen ohne eine kostpflichtige Lizenz erwerben zu müssen.

Mit Qt Creator, MinGW und gdb hat man auch noch eine kostenlose Entwicklungsumgebung für alle Plattformen, die noch dazu Unterstützung für Versionsverwaltungssysteme hat.

PS:
Portabilität ist mir schon sehr wichtig.
Mit .NET und Mono ist das zwar bedingt auch möglich,
Qt ist diesbezüglich aber weit überlegen.


----------

