{"id":51,"date":"2010-03-05T15:42:03","date_gmt":"2010-03-05T14:42:03","guid":{"rendered":"http:\/\/blog.kalmbach-software.de\/de\/2010\/03\/05\/ccli-und-winforms-macht-keinen-sinn\/"},"modified":"2012-08-23T13:29:13","modified_gmt":"2012-08-23T12:29:13","slug":"ccli-und-winforms-macht-keinen-sinn","status":"publish","type":"post","link":"http:\/\/blog.kalmbach-software.de\/de\/2010\/03\/05\/ccli-und-winforms-macht-keinen-sinn\/","title":{"rendered":"C++\/CLI und WinForms macht keinen Sinn"},"content":{"rendered":"<p>Vielen Anf\u00e4nger, welche C\/C++ lernen wollen, suchen sich nach einer kostenlosen Entwicklungsumgebung und stossen dann fr\u00fcher oder sp\u00e4ter auf die <a href=\"http:\/\/www.microsoft.com\/express\/downloads\/\">Visual Studio 2008\/2010 Express Edition<\/a>.<\/p>\n<p>Und ein Anf\u00e4nger will nat\u00fcrlich gleich sichtbare Erfolge sehen und beginnt logischerweise gleich mit einer Fenster-Anwendung.<\/p>\n<p>Leider enth\u00e4lt die VC2008\/2010EE nur WinForms als graphische Oberfl\u00e4che. Deshalb entwicklen die meisten dann nicht mit C\/C++, sondern mit C++\/CLI, was eine komplett andere Sprache ist und f\u00fcr die meisten nur zu Verwirrung f\u00fchrt.<\/p>\n<p>Ich Rate jedem Anf\u00e4nger davon ab VC 2008\/2010 Express Edition f\u00fcr graphische Oberfl\u00e4chen zu verwenden, aus folgenden Gr\u00fcnden:<\/p>\n<ul>\n<li>Der WinForms-Designer ist miserabel, da er die Implementierung von Methoden in der h-Datei vornimmt, was sp\u00e4testens zu Problemen f\u00fchrt, wenn man mehr als ein Form hat und auf Methoden\/Properties des anderen Forms zugreifen will (da man dann zyklische Abh\u00e4ngigkeiten in den h-Dateien hat, die man nur l\u00f6sen kann, wenn man die Implementierung in die cpp-Datei verlegt)\n<li>Wenn man die Anwendung <a href=\"http:\/\/blog.kalmbach-software.de\/de\/2009\/12\/17\/ccli-programme-auf-einem-anderen-rechner-ausfuhren\/\">verteilen will<\/a>, so muss man neben dem .NET-Framework auch die C-Runtime installieren; das muss man bei einer reinen .NET-Anwendung (z.B. C#) nicht\n<li>C++\/CLI ist prim\u00e4r als InterOp Sprache zwischen .NET und native Code gedacht; das sieht man auch schon daran, dass seit VC2008 auch der Data-Wizward f\u00fcr C++\/CLI entfernt wurde. Daraus ergibt sich gleich der n\u00e4chste Punkt:\n<li>Der <a href=\"https:\/\/connect.microsoft.com\/VisualStudio\/feedback\/ViewFeedback.aspx?FeedbackID=292118\">Data-Wizard wurde in VC 2008 entfernt<\/a> um auch deutlich zu machen, dass der Focus auf native-managed InterOp liegt\n<li>Ca. 99% aller Beispiele im Internet sind mit C#; man findet fast keine Beispiele in C++\/CLI\n<li>C++\/CLI ist eine <a href=\"http:\/\/www.ecma-international.org\/publications\/standards\/Ecma-372.htm\">eigene Sprache<\/a> 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)\n<li>C++\/CLI wird oft als &#8220;Erweiterung&#8221; 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<String^>). Wenn es gehen w\u00fcrde, dann k\u00f6nnte man C++\/CLI als Erweiterung sehen. Es geht aber nicht. Deshalb sind es zwei komplett getrennte Welten!\n<li>In VS 2010 wird es f\u00fcr C++\/CLI Projekte <a href=\"http:\/\/blogs.msdn.com\/vcblog\/archive\/2010\/03\/09\/intellisense-browsing-options-in-vc-2010.aspx\">kein Intellisense<\/a> geben; das deutet auch stark darauf hin, dass es nicht als prim\u00e4re Sprache f\u00fcr .NET geeignet ist\n<li><strong>VC 2012 enth\u00e4lt keine Projekt-Templates mehr f\u00fcr WinForms!!!!<\/strong> Siehe: <a href=\"http:\/\/blog.kalmbach-software.de\/de\/2012\/08\/23\/breaking-changes-in-vc2012\/\">http:\/\/blog.kalmbach-software.de\/de\/2012\/08\/23\/breaking-changes-in-vc2012\/<\/a><\/li>\n<\/ul>\n<p>Meine Empfehlung f\u00fcr Anf\u00e4ger:<br \/>\nWenn Ihr unbedingt graphische Oberfl\u00e4chen machen wollt, dann nehmt lieber C# (gibt es auch als Express Edition).<\/p>\n<p>Meine Empfehlung f\u00fcr Microsoft:<br \/>\nWenn Ihr auch mit VC++ Anf\u00e4nger erreichen wollt, dann liefert bitte die MFC in der Express-Edition mit; oder bindet von mir aus <a href=\"http:\/\/www.wxwidgets.org\/\">wxWidgets<\/a> ein \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vielen Anf\u00e4nger, welche C\/C++ lernen wollen, suchen sich nach einer kostenlosen Entwicklungsumgebung und stossen dann fr\u00fcher oder sp\u00e4ter auf die Visual Studio 2008\/2010 Express Edition. Und ein Anf\u00e4nger will nat\u00fcrlich gleich sichtbare Erfolge sehen und beginnt logischerweise gleich mit einer Fenster-Anwendung. Leider enth\u00e4lt die VC2008\/2010EE nur WinForms als graphische Oberfl\u00e4che. Deshalb entwicklen die meisten dann [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,3],"tags":[],"class_list":["post-51","post","type-post","status-publish","format-standard","hentry","category-alles-uber-dotnet-programmierung","category-alles-uber-die-echte-windowsprogrammierung"],"_links":{"self":[{"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/posts\/51","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/comments?post=51"}],"version-history":[{"count":0,"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/posts\/51\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/media?parent=51"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/categories?post=51"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.kalmbach-software.de\/de\/wp-json\/wp\/v2\/tags?post=51"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}