C++/CLI und WinForms macht keinen Sinn
Vielen Anfänger, welche C/C++ lernen wollen, suchen sich nach einer kostenlosen Entwicklungsumgebung und stossen dann früher oder später auf die Visual Studio 2008/2010 Express Edition.
Und ein Anfänger will natürlich gleich sichtbare Erfolge sehen und beginnt logischerweise gleich mit einer Fenster-Anwendung.
Leider enthält die VC2008/2010EE nur WinForms als graphische Oberfläche. Deshalb entwicklen die meisten dann nicht mit C/C++, sondern mit C++/CLI, was eine komplett andere Sprache ist und für die meisten nur zu Verwirrung führt.
Ich Rate jedem Anfänger davon ab VC 2008/2010 Express Edition für graphische Oberflächen zu verwenden, aus folgenden Gründen:
- Der WinForms-Designer ist miserabel, da er die Implementierung von Methoden in der h-Datei vornimmt, was spätestens zu Problemen führt, wenn man mehr als ein Form hat und auf Methoden/Properties des anderen Forms zugreifen will (da man dann zyklische Abhängigkeiten in den h-Dateien hat, die man nur lösen kann, wenn man die Implementierung in die cpp-Datei verlegt)
- Wenn man die Anwendung verteilen will, so muss man neben dem .NET-Framework auch die C-Runtime installieren; das muss man bei einer reinen .NET-Anwendung (z.B. C#) nicht
- C++/CLI ist primär als InterOp Sprache zwischen .NET und native Code gedacht; das sieht man auch schon daran, dass seit VC2008 auch der Data-Wizward für C++/CLI entfernt wurde. Daraus ergibt sich gleich der nächste Punkt:
- Der Data-Wizard wurde in VC 2008 entfernt um auch deutlich zu machen, dass der Focus auf native-managed InterOp liegt
- Ca. 99% aller Beispiele im Internet sind mit C#; man findet fast keine Beispiele in C++/CLI
- C++/CLI ist eine eigene Sprache und hat mit (ISO) C/C++ nichts zu tun; und das ganze zu mischen ist meistens noch viel sinnfreier, es sei denn, man weiss was man tut (was zu 99% nicht der Fall ist; zumindest in den Fragen, die ich aus den Foren entnehme)
- C++/CLI wird oft als “Erweiterung” von C/C++ gesehen. Diese Sicht ist aber komplett falsch! Ganz einfacher Beweis: Versuch in einen STL-Vector ein CLR Objekt reinzustopfen (z.B. std::vector
). Wenn es gehen würde, dann könnte man C++/CLI als Erweiterung sehen. Es geht aber nicht. Deshalb sind es zwei komplett getrennte Welten! - In VS 2010 wird es für C++/CLI Projekte kein Intellisense geben; das deutet auch stark darauf hin, dass es nicht als primäre Sprache für .NET geeignet ist
Meine Empfehlung für Anfäger:
Wenn Ihr unbedingt graphische Oberflächen machen wollt, dann nehmt lieber C# (gibt es auch als Express Edition).
Meine Empfehlung für Microsoft:
Wenn Ihr auch mit VC++ Anfänger erreichen wollt, dann liefert bitte die MFC in der Express-Edition mit; oder bindet von mir aus wxWidgets ein ![]()
March 18th, 2010 at 09:48
Guter Artikel.
Das MFC nicht in der Express-Edition ist, finde ich auch ärgerlich.
April 26th, 2010 at 05:20
Endlich einmal Jemand mit einer auch für Anfänger nachvollziehbaren Aussage!
May 26th, 2010 at 10:44
Ich konnte es nicht glauben, aber es ist wirklich so gekommen: Microsoft hat auch in der Release Version von VS 2010 die Intellisense Unterstützung für C++/CLI entfernt.
Auch wenn diese schon in der 2008er Version nicht besonders gut funktioniert hat, war sie immer noch eine große Hilfe.
Offenbar wollte man seitens Microsoft Programmier-Einsteiger dazu motivieren, sich gleich mit der .net-Technologie zu beschäftigen, da es in den Express Editionen nur die Möglichkeit gibt, graphische Benutzeroberflächen mithilfe von Windows-Forms zu erzeugen.
Jetzt hat man den Eindruck, dass durch den gezielten Einbau von Fiesheiten die Leute dazu gebracht werden sollen, zwecks .net-Programmierung völlig zu C# oder VB.net zu wechseln.
Und wieso werden Express-User (z.B. bei der 2008) mit Einschränkungen beim Syntax-Highlighting ( {…} … arghn!) bestraft, wo schon vor 10 Jahren kostenfreie IDEs diesbezüglich vollständige Tipphilfen anboten?
Mein Rat an Microsoft:
Entweder Ihr gebt Visual C++ 2010 Express ein Stück Brauchbarkeit zurück, und schiebt das Intellisense per Service Pack nach, oder man stellt zumindest die Möglichkeit eines rudimentären GUI-Designs per MFC zur Verfügung, oder die Express Edition wird ganz eingestampft.
So ist sie jedenfalls in Bezug auf die Entwicklung von .net-GUI Programmen weitgehend sinnfrei.
Mein Rat an Anfänger:
C++/CLI hat sowieso mehr Ähnlichkeit mit C# oder Java als mit “richtigem” C++. Für die Entwicklung von .net Programmen nehmt besser C#. Für ISO-C++ gehen auch andere IDEs wie Code::Blocks, Eclipse, NetBeans, openWatcom und bastelt Eure Oberflächen mit Qt oder
wxWidgets zusammen. Oder nehmt etwas Geld in die Hand und kauft Euch Visual Studio…
aber, ja richtig, ich vergaß: Die Standard Edition gibts ja garnicht mehr. So ein Zufall.
Und für das kleinste noch verfügbare Visual Studio 2010 (die Professional Edition) legt man mal eben sowas um die 700 Euro hin…. Microsoft ts ts ts… na besten Dank.
Der Verdacht liegt jedenfalls nahe, daß Microsoft C++/CLI sterben lassen will. Darin investierte Zeit könnte langfristig verschwendet sein.
July 20th, 2010 at 20:13
Naja, oder es liegt einfach daran, dass die Leute, die mit C++ anfangen sich erstmal ein Buch kaufen sollten anstatt gleich loszuprogrammieren. Ich steige gerade von VB zu C++ um und ich finde es auch etwas umständlich. Was man aber nicht vergessen darf ist, dass C++ nicht so beschränkt ist wie C++. Da kann man auch einer ganz anderen Ebene programmieren, man muß sich damit nur beschäftigen. C# ist da sicher ein netter Ansatz von Microsoft, aber auch die wissen, dass C# bei weitem nicht so Leistungsfähig ist!
Ihr könnt übrigens VC++ auch in der Express wie normales C++ verwenden. Im Prinzip braucht ihr nur die Windows Forms als GUI und den Rest verwendet ihr einfach nicht. Und der Zugriff auf die GUI eines anderen Form kann man auch anders lösen, als in die cpp zu kopieren. Dafür gibt es Gültigkeitsbereiche, die man einfach nur setzen muß. Manschmal hilft auch einfach nur ein #include und #pragma once verhindert das Mehrfachladen der Header!