Windows Forms und Visual C++ 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/2010 Express Edition 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-Wizard 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

    Empfehlung für Anfänger:
    Wenn Ihr unbedingt graphische Oberflächen (RAD) machen wollt, dann nehmt lieber C# (gibt es auch als Express Edition).
    Wenn Ihr wirklich C/C++ lernen wollt, dann nehmt die Professional-Version mit der MFC oder eine freie GUI-Bibliothek wie wxWidgets, GTK oder QT.

    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



  • Wie oft hast du das jetzt eigentlich schon geschreiben? 😃 🙂



  • Stirbt C++/CLI nicht langsam aus? Gabs doch vor kurzem ein Thread darüber



  • Ich bin froh, dass das hier jetzt so festgehalten ist.
    Ich hatte mir bei diesem Thema auch die Finger wundgeschrieben.
    Simon



  • Grudn:
    Da ich nicht die ganzen Klicks nur auf meinem Blog haben wollte, sondern auch noch das C++-Forum etwas davon abbekommt 😉

    Und nein, C++/CLI stirbt noicht aus, aber es ist nur für InterOp zu gebrauchen...



  • hmm.... schrieb:

    Stirbt C++/CLI nicht langsam aus? Gabs doch vor kurzem ein Thread darüber

    Wenn dann nur ganz langsam. Gerade große Branchenbereiche in der Industrie steigen nur langsam auf .net um. Dafür gibts aber viele alte Anwendungen im C++ und niemand wird sofort das ganze vorhandene Zeugs auf .net Portieren. Daher muss CLI als Bridge her. Ich denke da würden einige Firmen auf die Barrikaden gehen wenn das ganze auf einmal wegen "Aussterbens" nichts mehr angeboten würde.



  • Jochen: So, wie du Krämpfe bekommst, wenn jemand C++ mit C++/CLI mischt, bekomme ich Krämpfe, wenn jemand durchgehend C/C++ schreibt. Ich versteh einfach nicht, warum du das machst.



  • Michael E. schrieb:

    wenn jemand durchgehend C/C++ schreibt

    Ist doch allgemein üblich, wenn ich in mein Bücherregal schaue, sehe ich zum Beispiel Jeffrey Richters "Windows via C/C++". Und man wohl nicht behaupten, dass der keine Ahnung hat ...



  • Wenn man bei Google nach C/C++ sucht, erscheint als zweiter Eintrag dieses Forum als C/C++ Ecke. 🤡

    Und auf c-plusplus.net findet man dann Reklame für das Buch "C/C++ Schnellübersicht". 🤡



  • Naja, Windows-Systemprogrammierer haben so ihre eigenen Vorstellungen von "C++" 😞

    Was manche Leute als C++ verkaufen, ist manchmal schon abenteuerlich.

    Edit: Ich zitier mal, was ich grad gelesen hab (von http://c-plusplus.net/forum/viewtopic-var-t-is-263114.html):

    Nexus schrieb:

    Das stimmt bedingt. Wenn du C kannst, musst du dich nicht mehr um prozedurale Dinge wie Schleifen, If-Abfragen, Funktionen etc. kümmern. Falls du Zeiger schon verstanden hast, kommt dir das sicher auch zu Gute. Allerdings gibt es in C++ viele neue Sprachmittel wie Klassen, Templates, Operatoren, Namensräume, Exceptions, etc., die du auch alle lernen musst.

    Das Wichtigste ist aber wohl, dass die Programmierparadigmen in C++ ganz anders als in C aussehen. Man hat viel mehr Möglichkeiten zur Abstraktion und kann fertige Klassen für Anwendungsbereiche wie Stringverarbeitung und Speicherverwaltung einsetzen. Die Philosophie ist eine andere. In C++ verwaltet man nur noch selten manuell Speicher, malloc() und free() braucht man so gut wie gar nie. Oder man benutzt typsichere Streams statt printf() mit variablen Argumentlisten. Es ist von zentraler Bedeutung, dass du dir neue Techniken anschaust, auch wenn die alten aufgrund der Abwärtskompatibilität zu C weiterhin funktionieren. Denn wenn du C in C++ programmierst, hast du C++ noch nicht verstanden.



  • Dann könnt ihr gleich auch noch ein der 50000 Threads "Progrmm läuft auf anderen rechnern nicht mehr" pinnen.



  • Naja, sehe ich ein wenig anders.

    Visual Studio als IDE ist von der Installation die am wenigsten Problematische, und zum arbeiten richtig lecker. Der Compiler unterstützt TR1 sowie die 2010 Version schon die angedachten Änderungen zum neuen C++ Standart. Ob das mit der Intellisense so bleibt muß man schauen in der Final.
    Das mit dem Datawizard und anderen Features kann auch sein um die Distanz zwichen Express und Standart etwas zu erhöhen. Aber selbst die Standartversion ist von den Kostenpflichtigen die günstigste am Markt.

    Zwichen Manged und Nativ Heaps zu verschieben ist nicht wirklich Trivial, aber darum macht sich kein Anfänger Gedanken.
    Allerdings auch nicht Trivial ist es von QStrings von QT4, auf std::strings den Buchstabensalat zu bewegen.

    Das das .Net, in der richtigen Version,auf dem Zielrechner laufen muß, trifft auf jede .Net Sprache zu. Ist mit Sicherheit viel einfacher als QR ,MFC oder WX DLL als Anfänger auf den Zielrechner zu bekommen ^^.

    Natürlich ist C++/CLi eine eigene Sprache zu einem Framework, wenn mann es genau bestrachtet dann sind QT , Wxwidget und andere dann aber auch nicht c++ Iso.
    Eigene Strings, eigene Container und co.
    Eigentlich müßte mann demnach auch alles was nicht Windows, UNIX oder Unix Api ist als nicht C++ bezeichnen.

    Die Beispiele im Netz besziehen sich zwar oft auf C# fürs .net, aber das ist nicht wirklich entscheident, wichtig ist das man Infos übers .Net bekommt und man sich halt den Syntax zu CLI erlernt, der nicht wirklich dramatisch anders als C++ ist. Und dafür ist wie für alle Sprachen ein gutes Buch oder Dozent viel Wert.
    In der Summer einfacher dank Super Doku als andere Frameworks , da ist QT das einzig wirklich gut Dokumentierte leider nicht in Deutsch.

    .Net ob mit c# , VB oder c++/CLi bringt die schnellsten Ergebnisse beim Programmieren.

    Viel wichtiger als die Srachen oder das Framework ist das mann lernt bestimmt Probelem zu lösen, und das man das mit der Sprache macht mit der man am besten klar kommt.

    C# ist zwar die beste Sprache für das .Net aber ob das die beste Sprache ist um Programmieren zu lernen bezweifel ich.

    Meine Meinung ist da eher C rudimentär, dann C++ und sich dann wirklich alle Frameworks anschauen bei kleinen Projekten, und auch das .Net.
    Und dann mit dem zu arbeiten wo man mit am besten zurecht kommt.
    Und da ist c++ die beste Sprache um in wirklich alles reinzuschnuppern.
    EIn Anfänger ist mit C# und reiner OOP auch eigentlich ziemlich überfordert.

    Das Argument Portierbarkeit, OK.Die Frage muß man sich stellen ob die auch wiklich Notwendig ist. Schau sich mal einer die Marktanteile im CLient Bereich an.

    Was ich aber gut Verstehen kann, wenn mann C++ ganz dolle Lieb gewonnen hat. Und ständig einer im falschen Forum die Fragen stellt weil sie denken sie benutzen C++ 😃



  • Und das mit dem Winforms Deklarationen im Headerfile, überläst jedem selbst die Definition der Actionhandler in eine CPP zu packen.

    Mit Sicherheit einfacher als ne XML Datei vom QT oder WX Designer zu haben wo man sich die Bezeichner raussuchen kann und seine Handler selber Deklarieren kann.



  • 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!

    std::vector in Windows Forms ist doch gar kein Problem 😕

    Ist bei mir völlig unproblematisch...



  • Was tust du denn in den vector? Wenns ein CLR-Objekt ist, ists nur eine Frage der Zeit, bis es schief geht (wenns überhaupt kompiliert).



  • In dem Vektor speichere ich geschachtelte structs mit "std::string","int" und auch noch "std::vector" der wiederum eine struct mit "std::string" und "int" enthält.

    ich weiß dass diese mixen nicht unbeding guter Code ist, aber bei mir hats bisher geklappt. 🤡
    Auch wenn der Debugger bei globalen Vektoren mir eine falschen Inhalt anzeigt, lokal werden alle Daten richtig ausgelesen. 😃



  • Hallo,

    Ich Rate jedem Anfänger davon ab VC 2008/2010 Express Edition für graphische Oberflächen zu verwenden

    Ich bin z.B. kein Anfänger (und kein Profi), also solche Fragen wie: "wie bearbeite ich den Text von TextBox im Code" hab ich nicht. Ich hab schon mit WinForms einige Programme geschrieben und hab damit eigentlich keine Problemme.

    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

    .NET-Framework installieren? Hat (heutzutage) nicht jedes Windows .NET installiert (mindestest 3.5)? Also die Programme die ich erstellt habe, liefen bei anderen Rechnern (xp, vista, 7) problemmlos! Ausser bei Webbrowser-Programm, da gabs kleines Problemm mit Antivir.

    Soll ich jetzt trozdem (obwohl ich mich mit WinForms und C++/Cli auskene) auf C# oder wxWidgets umsteigen wenn ich graphische Oberfläche programmieren will?
    Ist klar, ich kann tun was ich will, aber als Rat.

    Gibts in Zukunft kein WinForms mit C++/Cli ?

    Klar dumme Fragen, aber ich kenne mich eigentlich gut mit C++/Cli und WinForms aus, und es schein alles zu klappen und zu passen. Ich wollte mal ein Datei-Commander schreiben. Und wenn WinForms kein Zukunft hat dann mach ich das anders.



  • Michael E. schrieb:

    Naja, Windows-Systemprogrammierer haben so ihre eigenen Vorstellungen von "C++" 😞

    Was manche Leute als C++ verkaufen, ist manchmal schon abenteuerlich.

    Edit: Ich zitier mal, was ich grad gelesen hab (von http://c-plusplus.net/forum/viewtopic-var-t-is-263114.html):

    Nexus schrieb:

    Das stimmt bedingt. Wenn du C kannst, musst du dich nicht mehr um prozedurale Dinge wie Schleifen, If-Abfragen, Funktionen etc. kümmern. Falls du Zeiger schon verstanden hast, kommt dir das sicher auch zu Gute. Allerdings gibt es in C++ viele neue Sprachmittel wie Klassen, Templates, Operatoren, Namensräume, Exceptions, etc., die du auch alle lernen musst.

    Das Wichtigste ist aber wohl, dass die Programmierparadigmen in C++ ganz anders als in C aussehen. Man hat viel mehr Möglichkeiten zur Abstraktion und kann fertige Klassen für Anwendungsbereiche wie Stringverarbeitung und Speicherverwaltung einsetzen. Die Philosophie ist eine andere. In C++ verwaltet man nur noch selten manuell Speicher, malloc() und free() braucht man so gut wie gar nie. Oder man benutzt typsichere Streams statt printf() mit variablen Argumentlisten. Es ist von zentraler Bedeutung, dass du dir neue Techniken anschaust, auch wenn die alten aufgrund der Abwärtskompatibilität zu C weiterhin funktionieren. Denn wenn du C in C++ programmierst, hast du C++ noch nicht verstanden.

    @Michael E.:
    Was genau stört dich an dem was Nexus da geschrieben hat?
    Oder hab' ich dich falsch verstanden?



  • ghostboss schrieb:

    Ich hab schon mit WinForms einige Programme geschrieben und hab damit eigentlich keine Problemme.

    das kommt noch 🙂

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-262627-and-postdays-is-0-and-postorder-is-asc-and-start-is-0.html



  • ghostboss schrieb:

    Ich bin z.B. kein Anfänger (und kein Profi)

    (...)

    Soll ich jetzt trozdem (obwohl ich mich mit WinForms und C++/Cli auskene) auf C# oder wxWidgets umsteigen wenn ich graphische Oberfläche programmieren will?
    Ist klar, ich kann tun was ich will, aber als Rat.

    Ja, solltest du.
    Ich behaupte nämlich einfach mal ganz frech, dass du dich mit C++/CLI eben nicht wirlich gut auskennst (wenn du schon selbst sagst dass du kein Profi bist). Ist nämlich nicht so, dass das ganze ohne Fallstricke wäre.

    Und natürlich ist C# lernen IMO sowieso angesagt. Und das meiste was man so mit .NET gedöns machen kann geht in C# viel viel VIEL angenehmer.