Forum: PC-Programmierung Welche Hochsprache für Industrieanwendung


von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Hallihallo!

Ich entwickle eine Wuchtmaschine für kleine bis mittelgroße Rotoren. Die 
mechanischen Komponenten und die Datenerfassung stehen soweit schon, die 
Daten werden mit einem µC per Ethernet an einen PC mit Windows 7 bzw. 
Windows 10 gesendet.
Meine ersten Programmiererfahrungen waren vor etwa 2 Jahren mit Matlab, 
hier habe ich meine erste Anwendung für die Datenauswertung entwickelt. 
Vor einem Jahr habe ich dann das Programm, was noch längst nicht fertig 
ist, auf C (WinAPI) umgeschrieben. Vor etwa einem halben Jahr bin ich 
dann auf C++ (MFC) umgestiegen.

Da die Auswerte-Software am PC noch einige Zeit in Anspruch nehmen wird, 
stellt sich mir die Frage ob sich ein erneuter Umstieg, auf z.B. C# 
lohnt. Als Programmierumgebung möchte ich bei VisualStudio bleiben.
Was mir an C# (WPF) gefällt, ist die XAML-Markupsprache für die 
GUI-Programmierung. Was mir an C++ (MFC) nicht gefällt ist die 
Kompilierungsdauer. Auch sieht es auf den ersten Blick mit VisualStudio 
so aus, als ob WPF Zukunftsträchtiger ist als MFC? Das Umschreiben 
meines bisherigen Codes würde kein Problem für mich darstellen. Die 
Plattform auf der meine Anwendung läuft kann ich selber auswählen, 
deshalb sehe ich die benötigten .Net Frameworks nicht als Nachteil. Bis 
auf das Ethernet-Gedöns, muss ich noch auf OpenGL bzw. DirectX Zugriff 
haben. Ethernet sollte kein Problem darstellen, zumindest nach dem was 
ich gelesen habe. Wie schaut es hier bezüglich OpenGL/DirectX aus?

Welche Vorteile bzw. Nachteile hätte ich noch bezüglich C++ / C#? Eignet 
sich C# für Industrieanwendungen genauso gut wie C++?


Danke schonmal!
Grüße Reggie

von JJ (Gast)


Lesenswert?

Aus IT-Betriebssicht kann ich dir sagen, dass .Net Frameworks keinen 
Spaß machen und schwierig zu pflegen sind.
Es gibt leider oft Spezial-Anwendungen die bestimmte .Net Versionen 
voraussetzen und mit anderen inkompatibel werden. Die Probleme sind 
natürlich alle lösbar, verursachen aber unnötigen Aufwand.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

JJ schrieb:
> Aus IT-Betriebssicht kann ich dir sagen, dass .Net Frameworks keinen
> Spaß machen und schwierig zu pflegen sind.
> Es gibt leider oft Spezial-Anwendungen die bestimmte .Net Versionen
> voraussetzen und mit anderen inkompatibel werden. Die Probleme sind
> natürlich alle lösbar, verursachen aber unnötigen Aufwand.

Danke für den Gedanken. Habe erst vor einigen Tagen mit C# angefangen. 
Hättest du da ein konkretes Beispiel für mich?

von Georg (Gast)


Lesenswert?

Hallo,

für solche Industrieanwendungen wäre es immer am besten, wenn sie so 
installiert würden, dass sie GARNICHTS weiter brauchen, also keine 
Version x.yz von Net-Libraries und möglichst wenig sonstiges 
Runtimezeugs, es sei denn, man liefert es selbst mit. Natürlich 
widerspricht das der Microsoft-Philosophie, die haben es am liebsten 
wenn du unrettbar abhängig bist, am besten speicherst du gleich deine 
Parameter bei denen in der Cloud, und alle Kunden brauchen ein Konto bei 
MS.

Georg

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Georg schrieb:
> für solche Industrieanwendungen wäre es immer am besten, wenn sie so
> installiert würden, dass sie GARNICHTS weiter brauchen, also keine
> Version x.yz von Net-Libraries und möglichst wenig sonstiges
> Runtimezeugs, es sei denn, man liefert es selbst mit.
Natürlich wäre mir eine absolut eigenständige Plattform am liebsten. Auf 
dem µC ist eine marginale GUI vorhanden, da ich aber nicht Unsummen an 
Geld ausgeben kann bietet sich mir ein Windows-PC prima an. Dort kann 
die weiterführende Auswertung erfolgen, händische Kalkulationen oder 
Ausdrücke. Ich verstehe die Problematik die du meinst aber ich bin hier 
absolut flexibel, was die PC-Software angeht, sprich ich habe das Sagen 
über die Plattform.
Diese Problematik hätte ich aber wohl mit MFC auch? Dort benötige ich 
schließlich auch so einige Windows Bibliotheken.

von Horst (Gast)


Lesenswert?

Reginald L. schrieb:
1.
> da ich aber nicht Unsummen an Geld ausgeben kann
2.
>bietet sich mir ein Windows-PC prima an

Finde den Logikfehler...


Bleib bei C/C++, damit hast du was vernünftiges. C# und der .NET-Mist 
sind so ein ekliges Geraffel.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Horst schrieb:
> 1.
>> da ich aber nicht Unsummen an Geld ausgeben kann
> 2.
>>bietet sich mir ein Windows-PC prima an
>
> Finde den Logikfehler...
Auf den ersten Blick sieht das tatsächlich so aus. Auf den Zweiten nicht 
mehr:
Einen für das Projekt tauglichen Windows-PC gibt es komplett für ein 
paar hundert Euro, hier muss nur noch die eigentliche Anwendung 
entwickelt werden. Möchte man so eine Anwendung auf einem autarken, 
selbst entwickeltem System zum Laufen bekommen wird man allein für die 
Hardware inklusive Gehäuse und Bildschirm schon mehr los, geschweige 
denn in Hinsicht auf die Entwicklungsarbeit.

Horst schrieb:
> Bleib bei C/C++, damit hast du was vernünftiges. C# und der .NET-Mist
> sind so ein ekliges Geraffel.
Was meinst du mit "Geraffel"? Was mir gerade auffällt, ist, dass man 
viel mit "PInvoke" schaffen muss, zumindest in meinem Fall.

von Uli, der Wilde (Gast)


Lesenswert?

Ein Windows PC ist gut und passend zur Visualisierung und 
Parametrisierung eines Prozessen auf externen Hardware. Die 
Kommunikation waere daher seriell genuegend. zB per USB UART.
Weshalb? Ein PC kriegt nie ein vernuenftiges Timing hin. Auch keine 
Echtzeit Verarbeitung. Das muss alles auf externer Hardware passieren. 
zB auf einem Arduino.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Uli, der Wilde schrieb:
> Ein Windows PC ist gut und passend zur Visualisierung und
> Parametrisierung eines Prozessen auf externen Hardware.
Deshalb ja der PC, weil mein Projekt wirtschaftlicher und schneller zu 
entwickeln ist.

Uli, der Wilde schrieb:
> Die
> Kommunikation waere daher seriell genuegend. zB per USB UART.
> Weshalb? Ein PC kriegt nie ein vernuenftiges Timing hin. Auch keine
> Echtzeit Verarbeitung. Das muss alles auf externer Hardware passieren.
> zB auf einem Arduino.
UART war mein erster Anlauf, mit steigenden Anforderungen bin ich auf 
USB gewechselt. Nach einiger Zeit bin ich schlussendlich bei Ethernet 
gelandet. Ausschlaggebend war die Übertragungsrate und der Ausschluss 
von USB3.0.
Die Verarbeitung geschieht komplett auf dem PC da hier einfach die 
Performance und der Speicher vorhanden ist.
Und naja, ein Arduino ist es nun wirklich nicht. Wobei ich schon an 
einen baremetal-Arduino gedachte hatte...

von Fitzebutze (Gast)


Lesenswert?

Hi,

C# ist nix für Industriesteuerungen. Für Front-Ends kann man sich den 
Krampf antun, aber portabel ist das nicht, geschweige denn robust, da 
macht einem ein Windows OS schon einen Strich durch die Rechnung. Besser 
beraten ist man mit Linux-Kenntnissen, C++, C, ev. noch etwas Python 
fürs Testen. Wenn man embedded/realtime gehen muss, erleichtert man sich 
da schon mal viel Portierungsarbeit. MFC ist IMHO "Broken by design", es 
gibt da deutlich besseres wie Qt oder auch wxWidgets. Generell würde ich 
mich an die "Keep it Simple"-Formel halten. Darunter fällt das 
.NET/C#-Geschmodder schon mal nicht, schon bei C++ gehen da oft die 
Meinungen auseinander.
Nichtsdestotrotz würde ich erst mal das machen, womit du dich am 
wohlsten fühlst und deine Prototypen am schnellsten umgesetzt kriegst. 
Alles andere muss man an Erfahrung so nach und nach sowieso sammeln.

von Tilo R. (joey5337) Benutzerseite


Lesenswert?

Wenn du die Wahl zwischen C++ und C# hast und die Applikation mehr GUI 
als Numbercruncher wird: ganz klar C#.

Gründe:
- C# ist eine deutlich modernere Sprache als C++. Viel der Komplexität 
aus C++ gibt es in C# so nicht. Getrennte Header- und 
Implementierungsdateien, die z.T. unterschiedliche Semantik von static, 
volatile, virtual in beiden, Pointer**. Das muss alles kein Problem 
sein, es geht aber halt auch ohne.

- Die Doku der .Net-Klassenbibliothek ist sehr gut.

- Microsoft pflegt das .Net-Framework schon lange und .Net ist für MS 
wichtig, plötzlich abgekündigt wird es also vermutlich nicht. (C++ 
natürlich auch nicht)

- C# ist potentiell sicherer als C++. C# wird zu Bytecode compiliert 
(Intermediate Language, IL) und interpretiert. C++ ist Maschinencode. 
Remote Code Execution oder Out-of-Bounds-Speicherzugriffe sind in IL, 
wenn überhaupt, nur viel schwieriger durchführbar.

- Garbage-Collection. Ja, das kann man auch in C++ haben, soweit ich das 
verstanden habe muss man aber aufpassen nichts zu vergessen. In C# ist 
es umgekehrt, man muss sich Mühe geben damit sie versagt.

Größter Nachteil von C#: es ist deutlich langsamer als C++.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Fitzebutze schrieb:
> C# ist nix für Industriesteuerungen.
Ich merke auch immer mehr, dass ich hier immer öfter auf die 
WinAPI-Funktionen zugreifen muss.

Fitzebutze schrieb:
> MFC ist IMHO "Broken by design", es
> gibt da deutlich besseres wie Qt oder auch wxWidgets.
Was meinst du damit genau? Was mich hier stört sind die Verrenkungen um 
eine akzeptable GUI aufzubauen. Das finde ich bei C# eben auch so toll. 
Ich glaube das ist wohl auch das hauptsächliche Problem, dass ich mit 
MFC zur Zeit habe und deshalb wechseln möchte. Hast du da einen Tipp, 
mit was ich am besten die GUI designen könnte? Unter MFC habe ich es ja 
mit dem Ressource-Editor gemacht, ein Witz gegen den Designer unter C#.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Tilo R. schrieb:
> Wenn du die Wahl zwischen C++ und C# hast und die Applikation mehr GUI
> als Numbercruncher wird: ganz klar C#.
Das ist es eben: Die Anwendung soll ganz klar eine komfortable und 
zeitgerechte GUI haben. Sie soll nicht wie eine 
typisch-graue-alt-Industrieanwendung aussehen, warum 
Industrieanwendungen so aussehen ist mir dabei schon klar.
Andererseits werden eben noch Modalanalysen durchgeführt als auch 
anspruchsvolle 2D-Plots.

Tilo R. schrieb:
> - C# ist eine deutlich modernere Sprache als C++.
Das ist es auch noch, was mich zu C# treibt...

Tilo R. schrieb:
> Größter Nachteil von C#: es ist deutlich langsamer als C++.
Hab ich auch schon gelesen, allerdings nichts von "deutlich" sondern 
eher im einstelligen %-Bereich. Wie dem auch sei: Spielt für meine 
Anwendung keine Rolle.

von Experte (Gast)


Lesenswert?

@Fitzebutze & Co:
Schon mal auch nur fünf Minuten für industrielle Anwendungen entwickelt? 
Da laufen tausende Apps 24*7 ohne Probleme. Schonmal einen Instandhalter 
gesehen der ein Update auf eine neue Linuxversion hinbekommen hat? 
Werdet erwachsen und kricht erstmal aus der Schule bevor ihr so einen 
unbelegten Unfug schreibt!

von Horst (Gast)


Lesenswert?

Experte schrieb:
> Schonmal einen Instandhalter
> gesehen der ein Update auf eine neue Linuxversion hinbekommen hat?
> Werdet erwachsen und kricht erstmal aus der Schule bevor ihr so einen
> unbelegten Unfug schreibt!

Fragt sich wer hier Müll schreibt. Windows ist doch so schrottig, dass 
Industrieanlagen bei Upgrades reihenweise ausfallen würden. Nicht 
umsonst laufen deswegen noch hunderttausende Maschinen mit Win 95, 98, 
2000.

von Pic T. (pic)


Lesenswert?

C# sowie Java, jeder kann sich den Sourcecode ansehen.

von Walter T. (nicolas)


Lesenswert?

Willst Du das Programm nutzen oder verkaufen? Im ersteren Fall ist 
Matlab gar nicht so schlecht. GUIs sind schnell gebaut, und Zahlen kann 
Matlab auch schnell verarbeiten.

Nicht so gut ist die Reaktionsgeschwindigkeit von Matlab-GUIs und die 
Lizenzpolitik.

von Der Andere (Gast)


Lesenswert?

Reginald L. schrieb:
> Meine ersten Programmiererfahrungen waren vor etwa 2 Jahren mit Matlab,
> hier habe ich meine erste Anwendung für die Datenauswertung entwickelt.
> Vor einem Jahr habe ich dann das Programm, was noch längst nicht fertig
> ist, auf C (WinAPI) umgeschrieben. Vor etwa einem halben Jahr bin ich
> dann auf C++ (MFC) umgestiegen.
>
> Da die Auswerte-Software am PC noch einige Zeit in Anspruch nehmen wird,
> stellt sich mir die Frage ob sich ein erneuter Umstieg, auf z.B. C#
> lohnt.

Das heisst du werkelst schon 2 Jahre an einer Software für dein Produkt, 
hast nach einem Jahr die Programmiersprache gewechselt und quasi neue 
angefangen und denkst jetzt wieder darüber nach die Programmiersprache 
zu wechseln?

Dein Produkt wird nie fertig werden, und wenn doch ist es bis dahin 
völlig veraltet.
Wenn man eine Software für ein Produkt entwickelt, dann legt man die 
Funktionalität fest, die Rahmenbedingungen, wählt danach die Hardware, 
notwendige 3rd Party Software und Progammiersprache aus und legt los. Es 
ist klar dass sich immer wieder Änderungen ergeben, so ein Projekt ist 
dynamisch, aber man muss einen Zeithorizont haben und zum Ziel kommen.

Eine andere Programmiersprache ist höchstens für Version 2.0.

Der ganze Thread klingt sehr nach Troll.

von Robert L. (lrlr)


Lesenswert?

also SO geht das schonmal garnicht..

nur EINE Programmiersprache?


den µC macht man natürlich in C
dann bracht man aber auf jeden Fall eine Multi-Tier Anwendung
die Datenbankanbindung in JAVA, wildem SQL, trigger (PL/SQL), den 
AppServer mit C#, Daten per XSL ausliefern (und ganz fest mit XSLT 
verwurstet), am Client natürlich CSS/HTML5/Javascript und auf jeden Fall 
ein Silverlight Plugin..




hab ich was vergessen?

achso, die IPAd app in ObjectivC

von nanana (Gast)


Lesenswert?

Walter T. schrieb:
> Nicht so gut ist die Reaktionsgeschwindigkeit von Matlab-GUIs und die
> Lizenzpolitik.

Reaktionsgeschwindigkeit stimmt. Was ist das Problem mit der 
Lizenzpolitik? Matlab-'Compiler' kaufen und fertig, oder nicht?

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Horst schrieb:
> Nicht
> umsonst laufen deswegen noch hunderttausende Maschinen mit Win 95, 98,
> 2000.
Das stimmt nur teilweise. Der Grund dafür ist eben, dass die Maschinen 
"alt" sind und eben solche Maschinen nicht unbedingt alle 10 Jahre neu 
gekauft werden. Wenn eine Maschine eine hohe Ausfallsicherheit aufweisen 
soll, läuft da eh kein Windows drauf.

Pic T. schrieb:
> C# sowie Java, jeder kann sich den Sourcecode ansehen.
Das ist ein Interessanter Punkt! Wie das?

Walter T. schrieb:
> Willst Du das Programm nutzen oder verkaufen? Im ersteren Fall ist
> Matlab gar nicht so schlecht. GUIs sind schnell gebaut, und Zahlen kann
> Matlab auch schnell verarbeiten.
Ich will mir den Weg noch offen halten, Potenzial für den Verkauf ist 
vorhanden, deshalb bin ich von Matlab weggegangen.

Der Andere schrieb:
> Das heisst du werkelst schon 2 Jahre an einer Software für dein Produkt,
> hast nach einem Jahr die Programmiersprache gewechselt und quasi neue
> angefangen und denkst jetzt wieder darüber nach die Programmiersprache
> zu wechseln?
Nä. Vor etwa anderthalb Jahren habe ich mit der Entwicklung der Maschine 
begonnen. Die Entwicklung der Anwendung zählt dazu auch, ja.

Der Andere schrieb:
> Der ganze Thread klingt sehr nach Troll.
Hier klingt nur einer nach Troll.

von Robert L. (lrlr)


Lesenswert?

Reginald L. schrieb:
> Pic T. schrieb:
>> C# sowie Java, jeder kann sich den Sourcecode ansehen.
> Das ist ein Interessanter Punkt! Wie das?

https://msdn.microsoft.com/de-de/library/bb979397.aspx

von Arc N. (arc)


Lesenswert?

Fitzebutze schrieb:
> Hi,
>
> C# ist nix für Industriesteuerungen. Für Front-Ends kann man sich den
> Krampf antun, aber portabel ist das nicht, geschweige denn robust, da
> macht einem ein Windows OS schon einen Strich durch die Rechnung.

Von welchem Windows reden wir hier? Windows 95?
Solche Visualisierungen/Steuerungen unter Windows zu machen ist absolut 
üblich (und danach klingt OpenGL, DirectX)
Wenn es um harte Echtzeit geht ist die Plattform weder (nur) ein 
normaler PC/Server noch ein OS wie Linux oder Windows, die so komplex 
sind, dass die geforderten Eigenschaften nicht mit realistischem Aufwand 
bewiesen werden können.
Portabel wird das ganze sowieso nicht und muss es auch nicht sein, da 
niemand den Aufwand betreiben wird mal eben zwischendurch die 
(Betriebs-)Systeme auszutauschen.
Ob man mittel-/langfristig über andere Systeme nachdenkt, ist dagegen 
was anderes und durchaus sinnvoll.

> Generell würde ich
> mich an die "Keep it Simple"-Formel halten. Darunter fällt das
> .NET/C#-Geschmodder schon mal nicht, schon bei C++ gehen da oft die
> Meinungen auseinander.

Ohne Begründung ist das einfach nur Polemik

Reginald L. schrieb:
> Was meinst du mit "Geraffel"? Was mir gerade auffällt, ist, dass man
> viel mit "PInvoke" schaffen muss, zumindest in meinem Fall.

Für was genau?

Georg schrieb:
> Hallo,
>
> für solche Industrieanwendungen wäre es immer am besten, wenn sie so
> installiert würden, dass sie GARNICHTS weiter brauchen, also keine
> Version x.yz von Net-Libraries und möglichst wenig sonstiges
> Runtimezeugs, es sei denn, man liefert es selbst mit. Natürlich
> widerspricht das der Microsoft-Philosophie, die haben es am liebsten
> wenn du unrettbar abhängig bist, am besten speicherst du gleich deine
> Parameter bei denen in der Cloud, und alle Kunden brauchen ein Konto bei
> MS.

Pic T. schrieb:
> C# sowie Java, jeder kann sich den Sourcecode ansehen.

.NET Native...
"During precompilation, required portions of the .NET Framework are 
statically linked into your app. This allows the app to run with 
app-local libraries of the .NET Framework..."
https://msdn.microsoft.com/en-us/library/dn584397.aspx

: Bearbeitet durch User
von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Arc N. schrieb:
> Für was genau?
Ich habe gestern Abend/Nacht mal in C# reingeschnuppert und wollte 
beispielsweise eine Console im Hintergrund, als Debugging-Hilfe, laufen 
lassen. Um dieses Fenster auf meine Wünsche anzupassen musste ich schon 
fünf WinAPI-Funktionen importieren (AllocConsole(),SetWindowLong(),...)

Arc N. schrieb:
> .NET Native...
> "During precompilation, required portions of the .NET Framework are
> statically linked into your app. This allows the app to run with
> app-local libraries of the .NET Framework..."
> https://msdn.microsoft.com/en-us/library/dn584397.aspx
Das ist natürlich auch sehr interessant, hab ich auch nicht gewusst.

von Borislav B. (boris_b)


Lesenswert?

Reginald L. schrieb:
> eine Console im Hintergrund, als Debugging-Hilfe, laufen
> lassen

Nimmt man dafür nicht üblicherweise das VisualStudio Output Fenster?
Also "Debug.WriteLine(...)"?

Hat den Vorteil, dass es im Release-Build automatisch entfernt wird.

: Bearbeitet durch User
von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Boris P. schrieb:
> Nimmt man dafür nicht üblicherweise das VisualStudio Output Fenster?
> Also "Debug.WriteLine(...)"?
Ich benutze im entfernten Sinne Console.WriteLine(). Ich dachte hier an 
ein Debugging ohne VisualStudio. Ist auch nur im "Admin-Modus" zu sehen.

Ich spiele immer noch mit C# herum. Sehe ich das richtig, dass ich mit 
C++ kleine Bibliotheken schreiben kann und darin enthaltene Funktionen 
in C# benutzen kann?

von Borislav B. (boris_b)


Lesenswert?

Reginald L. schrieb:
> Ich spiele immer noch mit C# herum. Sehe ich das richtig, dass ich mit
> C++ kleine Bibliotheken schreiben kann und darin enthaltene Funktionen
> in C# benutzen kann?

Ja, das geht. Entweder ein rein native DLL schreiben und die per PInvoke 
verwenden, oder noch einen C++/CLI Wrapper mit in die DLL packen, dann 
lässt sie sich wie eine ganz normale .NET Assembly als Referenz in C# 
verwenden.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Boris P. schrieb:
> Ja, das geht. Entweder ein rein native DLL schreiben und die per PInvoke
> verwenden, oder noch einen C++/CLI Wrapper mit in die DLL packen, dann
> lässt sie sich wie eine ganz normale .NET Assembly als Referenz in C#
> verwenden.
Super, danke!

von Stephan W. (swal)


Lesenswert?

Kann es sein, dass du Programmiersprache zu sehr mit GUI-Toolkit 
assozierst? Beides hat in meinen Augen nur bedingt etwas miteinander zu 
tun.
Wenn du C/C++ beherrschst, dann bleib doch einfach dabei und such dir 
ein genehmes GUI Toolkit.
MFC kommt mit Visual Studio mit, das ist bequem. Aber MFC hat auch mir 
nie so richtig Spaß gemacht. Hast du dir mal Qt oder wxWidgets 
angesehen? Ist in meinen Augen deutlich moderner.
Qt ist super, wenn portierbarkeit wichtig ist. Es ist extrem umfangreich 
und sieht am besten aus, wenn es um die Erstellung eigener UI Elemente 
geht. wxWidgets ist dagegen ein Leichtgewicht, super wenn einem die 
fertigen Widgets ausreichen (man kann aber natürlich auch eigene 
erstellen) und einfach nicht so überwältigend.

Und das sind nur die zwei, die ich verwende. Da gibt es noch deutlich 
mehr. Vielleicht ist auch was für dich dabei:
https://de.wikipedia.org/wiki/Liste_von_GUI-Bibliotheken#C.2B.2B

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Angehängte Dateien:

Lesenswert?

Stephan W. schrieb:
> Kann es sein, dass du Programmiersprache zu sehr mit GUI-Toolkit
> assozierst? Beides hat in meinen Augen nur bedingt etwas miteinander zu
> tun.
Ich glaube du bringst es auf den Punkt!

Stephan W. schrieb:
> Wenn du C/C++ beherrschst, dann bleib doch einfach dabei und such dir
> ein genehmes GUI Toolkit.
> MFC kommt mit Visual Studio mit, das ist bequem. Aber MFC hat auch mir
> nie so richtig Spaß gemacht. Hast du dir mal Qt oder wxWidgets
> angesehen? Ist in meinen Augen deutlich moderner.
> Qt ist super, wenn portierbarkeit wichtig ist. Es ist extrem umfangreich
> und sieht am besten aus, wenn es um die Erstellung eigener UI Elemente
> geht. wxWidgets ist dagegen ein Leichtgewicht, super wenn einem die
> fertigen Widgets ausreichen (man kann aber natürlich auch eigene
> erstellen) und einfach nicht so überwältigend.
Genau das ist es, mit MFC wird der ganze Code so langsam sehr 
unübersichtlich.
Auf der Qt-Homepage war ich schon, weißt du da wie es mit der 
OpenSource-"Lizenz" aussieht? Muss ich hier den kompletten Code 
offenlegen oder nur den der GUI?

Stephan W. schrieb:
> Und das sind nur die zwei, die ich verwende. Da gibt es noch deutlich
> mehr. Vielleicht ist auch was für dich dabei:
> https://de.wikipedia.org/wiki/Liste_von_GUI-Bibliotheken#C.2B.2B
Auch diese Seite habe ich mir schon angesehen...und wurde mit 
Informationen erschlagen.

Ich würde gerne etwas in Richtung angehängtes Bild erstellen, mit 
Freigabe des GUI-Codes habe ich absolut kein Problem. Nur den restlichen 
Code würde ich gerne vorerst für mich behalten wollen. Könntest du mir 
da Qt empfehlen?

Vielen Dank für diesen Stups in die richtige Richtung!

von Fitzebutze (Gast)


Lesenswert?

Arc N. schrieb:
>> Generell würde ich
>> mich an die "Keep it Simple"-Formel halten. Darunter fällt das
>> .NET/C#-Geschmodder schon mal nicht, schon bei C++ gehen da oft die
>> Meinungen auseinander.
>
> Ohne Begründung ist das einfach nur Polemik

Die Begründung kann ich gerne zusammenfassend liefern - es gibt aber 
eine Menge Threads dazu.
Das Framework ist mit Konstrukten aufgebläht, die ein vernünftiges 
Memory-Management sehr schwierig machen. Das endet dann darin, dass ein 
etwas aufwendigerer Prozess, der öfters Objekte alloziert/freigibt, nach 
einigen 100 Betriebstunden plötzlich keinen Speicher mehr kriegt, obwohl 
genügend da ist. Siehe Memory-Fragmentierung. Das Problem ist allerdings 
nicht OS-spezifisch, obwohl die Linux-SLAB-Allocation etwas besser 
performt als das Windows-Speichermanagement.
Auf einem Embedded-Target oder Schaltschrankelement ist das ein 
Albtraum.

Die Chancen, ein C#-Programm für eine robuste Steuerung zertifiziert zu 
kriegen, sind somit deutlich geringer als bei einer sauber 
programmierten State-Machine in C mit strengen Regeln was malloc() 
betrifft.
Mit den Runtime-Strukturen von .net kann man sich richtig elegant ins 
Knie schiessen. Wer sowas zertifiziert oder als robust erklärt, ist 
meines Erachtens nicht seriös.

Das ist schon bei C++-Sachen knifflig, aus dem Grund ist auch kein 
einziges stabiles OS in C++ geschrieben. Wenn man diesen Ansatz 
verfolgen will, muss man eine Menge C++-Features schon mal verbieten, da 
kann mans auch gleich in besser verifizierbarem C machen.
Wie ich ja schon sagte: Für Visualisierung ist das kein Problem, da sind 
Betriebszeiten von einigen 1000 Stunden am Stück auch nicht gefordert.

Was nun Industriesteuerungen und die Fragen des TO angeht: Wenn man mit 
der Zeit gehen will, ist man mit Kenntnis in Linux/QNX o.ä. und QT nicht 
schlecht beraten.
Nicht umsonst stecken solche Entwicklungen bevorzugt in medizinischen 
Diagnosegeräten. Ist aber immer wieder bezeichnend, dass bei dem Thema 
die Troll-Unken wieder aus ihren Löchern unken :-)

Wenn man bei grossen, schwerfälligen Firmen arbeiten will, kann man mit 
Klickibunti aus der Microsoft- oder Apple-Welt nach wie vor punkten, da 
man es dort oft nicht anders kennt und 90% der Entwicklung für die 
Fehlersuche durch externe Spezialisten finanzieren kann :-)

Und für Prototyping ist Klickibunti auch völlig ok, darum: macht ruhig 
C#, wenn es industriell wird und Geld abwirft, kann man es immer nochmal 
neu und robust machen (lassen). Typischerweise muss Klickibunti auch 
nicht 24/7 laufen und nicht unbedingt in 10 Jahren wiederverwertbar 
sein.

Reginald L. schrieb:
> Was meinst du damit genau? Was mich hier stört sind die Verrenkungen um
> eine akzeptable GUI aufzubauen. Das finde ich bei C# eben auch so toll.
> Ich glaube das ist wohl auch das hauptsächliche Problem, dass ich mit
> MFC zur Zeit habe und deshalb wechseln möchte. Hast du da einen Tipp,
> mit was ich am besten die GUI designen könnte? Unter MFC habe ich es ja
> mit dem Ressource-Editor gemacht, ein Witz gegen den Designer unter C#.

MFC ist ein Dinosaurier, da stecken Altlasten drin, die man heute 
einfach nicht mehr so machen würde. So manche Callback-Konzepte sind da 
von hinten durch die Brust und sorgen nicht für robuste GUIs.
Ich habe ganz gute Erfahrungen mit wxWidgets bzw. wxDesigner gemacht, 
letzterer wird allerdings nicht mehr gewartet. Ich würde mir mal die 
QT-Sachen anschauen, die sind von der Wartung her nicht schlecht.
Wenn es nur um die GUI geht, haben auch andere Mütter schöne Kinder 
(Java, Delphi, ...). Für Rapid Prototyping ist sogar Labview oder 
myopenlab (Labview in Java für Arme oder Coder) legitim.
Generell ist der Ansatz, eine vernünftige Library (DLL) zu entwickeln 
und entsprechend aus einer anderen Hochsprache zu nutzen, schon mal gut 
für die Wartbartkeit/Wiederverwertung.
Aber dem C#-Framework sollte man die mainloop der Steuerung nicht 
überlassen :-)

von Fitzebutze (Gast)


Lesenswert?

Reginald L. schrieb:
> Ich würde gerne etwas in Richtung angehängtes Bild erstellen, mit
> Freigabe des GUI-Codes habe ich absolut kein Problem. Nur den restlichen
> Code würde ich gerne vorerst für mich behalten wollen. Könntest du mir
> da Qt empfehlen?

Solange du dich vor Codelizenzen, die mit dem Wort "GPL" infiziert sind, 
hütest, musst du deinen Code nicht offenlegen. Bei "LGPL" auch nur den 
Code der Bibliothek, wenn du was dran veränderst.
Und abgesehen davon: Eine Menge kleiner Firmen halten sich nicht an die 
GPL und regeln das später. Nur die grossen Firmen tauchen ab und an bei 
gplviolations.org auf...

von Lukas K. (carrotindustries)


Lesenswert?

Klingt zwar erstmal dumm, klappt aber überraschend gut: Python und Gtk 
mit https://sourceforge.net/projects/pygobjectwin32/ Mit cx_freeze kann 
man Python, Gtk und alle andere Abhängigkeiten in einen Ordner 
zusammenschnüren, der dann ohne weitere Abhängigkeiten auf jedem Windows 
läuft. Nen MSI-Installer kann man ohne Mehraufwand auch erzeugen.

Allerdings wird das Programm, weil es Python und ein halbes GNOME 
mitbringt, gleich mehrere Megabyte groß und Gtk schert sich recht wenig 
darum, auf Windows nativ auszusehen.

von Pandur S. (jetztnicht)


Lesenswert?

Man kann den dynamischen Speicher auch umgehen indem man alle Objekte 
statisch alloziert ... Dann aendern sich nur die Werte und ein paar 
Flags.

von Fitzebutze (Gast)


Lesenswert?

Win User schrieb im Beitrag #4525602:
> Das stimmt einfach nicht. Wenn ein Programm Speicher frisst hat der
> Programmierer einen Fehler gemacht. In C++ muss new/delete ausbalanciert
> sein, in C# muss man dem GarbageCollector in zeitkritischen Anwendungen
> helfen.
>

Ha ha. Genau das ist das Problem. Garbage Collection im Userspace hat in 
robusten Anwedungen nix zu suchen. Mit Programmierfehlern hat das nichts 
zu tun, sondern damit, dass manche OS nur bedingt ihren Speicher 
reorganisieren können, wenn er zu sehr fragmentiert ist (lesen!). 
Trotzdem zeigt dir die Prozesskontrolle immer noch denselben "free heap" 
an.

> Fitzebutze schrieb:
>> Für Visualisierung ist das kein Problem, da sind
>> Betriebszeiten von einigen 1000 Stunden am Stück auch nicht gefordert.
>
> Das erzahle mal den Usern die WinCC, InTouch usw. in der Produktion
> einsetzen.

Die führen ja auch regelmässig Freudentänze ob der stabilen Systeme 
auf...[har har].

>
> Fitzebutze schrieb:
>> Nicht umsonst stecken solche Entwicklungen bevorzugt in medizinischen
>> Diagnosegeräten.
>
> Schonmal die Lizenzbedingungen von QNX gelesen? Auch die schliessen jede
> Haftung für den Einsatz in medizinischen Geräten aus.

Ich spreche von Diagnosegeräten. Der Marktführer in Rotkreuz setzt auf 
Linux, andere Marktführer im Bereich Robotik (ja, auch definitiv 
sicherheitsrelevant) auf QNX.

>
> Schonmal eine moderne Pruduktionsstätte, ein Schalthaus, eine
> Steuerbühne von innen gesehen?

Und schon wieder unken sie...
Da sehe ich allerdings regelmässig SPS.

Oh D. schrieb:
> Man kann den dynamischen Speicher auch umgehen indem man alle Objekte
> statisch alloziert ... Dann aendern sich nur die Werte und ein paar
> Flags.

Genau so macht man's, oder implementiert eigene memory pools. Aber 
typischerweise in Sprachen, die keinen bescheuerten Laufzeitballast 
mitbringen. Also z.B. C/C++. Das Problem hat man bei Python auch, aber 
man kriegt es besser in den Griff. Manche Kollegen würden sagen, dass C 
und Python ".NET done right" ist...

von Borislav B. (boris_b)


Lesenswert?

Fitzebutze schrieb:
> Genau so macht man's, oder implementiert eigene memory pools. Aber
> typischerweise in Sprachen, die keinen bescheuerten Laufzeitballast
> mitbringen. Also z.B. C/C++. Das Problem hat man bei Python auch, aber
> man kriegt es besser in den Griff. Manche Kollegen würden sagen, dass C
> und Python ".NET done right" ist...

Also ich würde in so einem Umfeld auf eine Sprache setzten, die es mir 
einfach macht robusten und sicheren Code zu schreiben. Und da sehe ich 
C# meilenweit vor C++. In C++ kann einfach zu viel schief gehen und 
einem dann um die Ohren fliegen, wenn man es am wenigsten erwartet.

Auch in Sachen Multithreading ist das Leben mit C# um ein vielfaches 
einfacher. Von der Entwicklungseffizienz mal ganz zu schweigen...

(PS: Und man bekommt echtes, natives Cross-Platform, was einem andere 
Sprachen/Frameworks wie z.B. Qt so nicht bieten können.)

: Bearbeitet durch User
von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Habe jetzt ne Weile lang Qt ausprobiert, da gefällt mir der dauernde 
Wechsel zwischen Qt und MFC nicht so sehr. Ansonsten finde ich den GUI 
Builder allerdings spitze.

Bleibe jetzt erst mal bei C#. Es ist schon ein deutlicher Unterschied zu 
MFC, vor allem zeitlich. Mit dem GUI Builder bin ich hier recht 
zufrieden.

Boris P. schrieb:
> In C++ kann einfach zu viel schief gehen und
> einem dann um die Ohren fliegen, wenn man es am wenigsten erwartet.
Bin mal gespannt wie es mit Sockets bei C# ausschaut. Mit MFC habe ich 
hier kleinere Probleme gehabt die ich nicht zufriedenstellend lösen 
musste.

Boris P. schrieb:
> Auch in Sachen Multithreading ist das Leben mit C# um ein vielfaches
> einfacher
Da bin ich auch gespannt. Bei MFC muss man schon schöne Verrenkungen 
anstellen.

von Horst (Gast)


Lesenswert?

Boris P. schrieb:
> (PS: Und man bekommt echtes, natives Cross-Platform, was einem andere
> Sprachen/Frameworks wie z.B. Qt so nicht bieten können.)

Jetzt hast du meinen Trolldetektor kaputt gemacht. Soviel Schrott habe 
ich schon lange nicht mehr gelesen.

QT das auf zig Plattformen läuft mit C#/.NET vergleichen, das nur auf 
Windows läuft und dann ernsthaft behaupten, C#/.NET wäre natives 
Cross-Plattform. Willst du uns verarschen?

von Rolf M. (rmagnus)


Lesenswert?

Reginald L. schrieb:
> Habe jetzt ne Weile lang Qt ausprobiert, da gefällt mir der dauernde
> Wechsel zwischen Qt und MFC nicht so sehr.

Hä? Was für ein dauernder Wechsel?

> Bleibe jetzt erst mal bei C#. Es ist schon ein deutlicher Unterschied zu
> MFC, vor allem zeitlich.

Und wie machst du das da mit dem "dauernden Wechsel"?

> Bin mal gespannt wie es mit Sockets bei C# ausschaut. Mit MFC habe ich
> hier kleinere Probleme gehabt die ich nicht zufriedenstellend lösen
> musste.

Qt hat auch eigene komfortable Socketklassen.

> Boris P. schrieb:
>> Auch in Sachen Multithreading ist das Leben mit C# um ein vielfaches
>> einfacher
> Da bin ich auch gespannt. Bei MFC muss man schon schöne Verrenkungen
> anstellen.

Auch da hat Qt so einiges zu bieten.

Reginald L. schrieb:
> Auf der Qt-Homepage war ich schon, weißt du da wie es mit der
> OpenSource-"Lizenz" aussieht?

Warum "Lizenz" in Anführungszeichen?

> Muss ich hier den kompletten Code offenlegen oder nur den der GUI?

Wenn du für die kommerzielle Qt-Lizenz nicht bezahlen willst, kannst du 
Qt under der LGPL nutzen. Dann musst du Änderungen, die du an Qt selbst 
machst, offenlegen. Und es muss dem Benutzer möglich sein, die von dir 
gelieferte Qt gegen eine eigene Version auszutauschen, was im 
Wesentlichen darauf hinausläuft, dynamisch zu linken. Von deinen 
Programm selbst musst du keinerlei Code offenlegen.

Reginald L. schrieb:
> Ich würde gerne etwas in Richtung angehängtes Bild erstellen

Dann könnte vielleicht Qt mit qwt ganz interessant sein.

Fitzebutze schrieb:
> Und abgesehen davon: Eine Menge kleiner Firmen halten sich nicht an die
> GPL und regeln das später. Nur die grossen Firmen tauchen ab und an bei
> gplviolations.org auf...

Das soll jetzt hoffentlich keine Empfehlung sein, gegen 
Lizenzbedingungen zu verstoßen nach dem Motto: Interessiert ja eh 
keinen.
Wer bei der Entwicklung einer kommerziellen Software so vorgeht, 
verdient es nicht anders, als in Grund und Boden geklagt zu werden.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Rolf M. schrieb:
> Reginald L. schrieb:
>> Habe jetzt ne Weile lang Qt ausprobiert, da gefällt mir der dauernde
>> Wechsel zwischen Qt und MFC nicht so sehr.
>
> Hä? Was für ein dauernder Wechsel?
>
>> Bleibe jetzt erst mal bei C#. Es ist schon ein deutlicher Unterschied zu
>> MFC, vor allem zeitlich.
>
> Und wie machst du das da mit dem "dauernden Wechsel"?
>
>> Bin mal gespannt wie es mit Sockets bei C# ausschaut. Mit MFC habe ich
>> hier kleinere Probleme gehabt die ich nicht zufriedenstellend lösen
>> musste.
>
> Qt hat auch eigene komfortable Socketklassen.
Ich bin davon ausgegangen, dass ich Qt ausschließlich für die GUI 
benutze. Mit dem Qt-Editor möchte ich nur ungern arbeiten. Kann ich von 
Qt aus auch direkt WinAPI Funktionen nutzen?

Rolf M. schrieb:
> Das soll jetzt hoffentlich keine Empfehlung sein, gegen
> Lizenzbedingungen zu verstoßen nach dem Motto: Interessiert ja eh
> keinen.
> Wer bei der Entwicklung einer kommerziellen Software so vorgeht,
> verdient es nicht anders, als in Grund und Boden geklagt zu werden.
Wer keine 300 Dollar monatlich für eine Lizenz ausgeben kann, der hat es 
auch nicht verdient zu programmieren!

von Daniel A. (daniel-a)


Lesenswert?

Reginald L. schrieb:
> Ich bin davon ausgegangen, dass ich Qt ausschließlich für die GUI
> benutze. Mit dem Qt-Editor möchte ich nur ungern arbeiten. Kann ich von
> Qt aus auch direkt WinAPI Funktionen nutzen?

Qt ist nur eine Library, und da man in c(++) winapi funktionen aufrufen 
kann, kann man das auch aus von qt aufgerufenen callbacks. Das ist aber 
definitiv der falsche Ansatz.

Wenn du die WinAPI funktionen nutzen willst, um das Fenster zu 
manipulieren, dann bleib gleich bei plain WinAPI. Entweder man nutzt das 
GUI Framework ganz oder garnicht, halbe Sachen sind murks.

Wenn du WinAPI für andere zwecke benötigst, dan überlege dir eine 
Abstraktion mit einem sinvollen Interface. Ausserdem sollte man GUI und 
Logik trennen. Wenn du es richtig machst kannst du am ende das GUI, die 
Logik oder das Platformspezifische WinAPI geraffel austauschen, ohne den 
rest ändern zu müssen. Beffasse dich auch mit der Schichtarchitektur:
https://de.m.wikipedia.org/wiki/Schichtenarchitektur (Die im Artikel 
verschiedenen aufgelisteten Schichten kann man ignorieren, man muss 
diese einfach sinnvoll wählen)

Nun noch zum QT-Editor, den muss man natürlich nicht nutzen, wenn man 
nicht will. Ich finde QML cool, schau dir dass doch noch an.

Reginald L. schrieb:
> Wer keine 300 Dollar monatlich für eine Lizenz ausgeben kann, der hat es
> auch nicht verdient zu programmieren!

Dummes gelaber! Ich bin immer bestrebt, sowenige Fremdquellen wie 
möglich zu verwenden, und wenn ich etwas in seltenen fällen nicht selber 
schreibe, dann kommen mir nur Libraries mit MIT Lizenz oder 
vergleichbarem rein. Alles, was ich nicht für mich behalten will (80%), 
stell ich mit MIT Lizenz in die Wildnis. Dadurch muss ich mich nicht mit 
Lizenzproblemen herumschlagen, habe keine Kosten, bin Unabhängig, und 
Profitiere von den Profitören meiner Open Source teile. Es geht also 
nicht darum, keine 300$ ausgeben zu können, sondern dass das meistens 
total überflüssig ist.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Daniel A. schrieb:
> Entweder man nutzt das
> GUI Framework ganz oder garnicht, halbe Sachen sind murks.
Sehe ich, insofern die Libraries auch das können was die WinAPI kann, 
auch so.

Daniel A. schrieb:
> Ausserdem sollte man GUI und
> Logik trennen.
Das werde ich jetzt versuchen noch weiter zu trennen als bisher. Ich 
programmiere ja noch nicht so lange...Übung, Übung, Übung...

Daniel A. schrieb:
> Dummes gelaber! Ich bin immer bestrebt, sowenige Fremdquellen wie
> möglich zu verwenden, und wenn ich etwas in seltenen fällen nicht selber
> schreibe, dann kommen mir nur Libraries mit MIT Lizenz oder
> vergleichbarem rein. Alles, was ich nicht für mich behalten will (80%),
> stell ich mit MIT Lizenz in die Wildnis. Dadurch muss ich mich nicht mit
> Lizenzproblemen herumschlagen, habe keine Kosten, bin Unabhängig, und
> Profitiere von den Profitören meiner Open Source teile. Es geht also
> nicht darum, keine 300$ ausgeben zu können, sondern dass das meistens
> total überflüssig ist.
Naja, das war Sarkasmus. Ich versuche möglichst viel selber zu machen, 
sonst hätte ich auch nicht mit diesem Projekt begonnen. Mit Lizenzen und 
Urheberrechten sehe ich das privat sehr gelassen. Da ich noch nicht 
weiss, wo dieses Projekt endet, muss ich hier eben ein Auge darauf 
werfen.

von Sheeva P. (sheevaplug)


Lesenswert?

Tilo R. schrieb:
> Wenn du die Wahl zwischen C++ und C# hast und die Applikation mehr GUI
> als Numbercruncher wird: ganz klar C#.

Verzeih', aber ich finde das gar nicht so klar.

> Gründe:
> - C# ist eine deutlich modernere Sprache als C++. Viel der Komplexität
> aus C++ gibt es in C# so nicht. Getrennte Header- und
> Implementierungsdateien, die z.T. unterschiedliche Semantik von static,
> volatile, virtual in beiden, Pointer**. Das muss alles kein Problem
> sein, es geht aber halt auch ohne.

Das stimmt, aber dafür hat man weniger Kontrolle über den genauen 
Ablauf. Das kann bei Echtzeitanwendungen zu erheblichen Problemen 
führen.

> - Die Doku der .Net-Klassenbibliothek ist sehr gut.

Die von beispielsweise Qt ebenfalls.

> - Microsoft pflegt das .Net-Framework schon lange und .Net ist für MS
> wichtig, plötzlich abgekündigt wird es also vermutlich nicht. (C++
> natürlich auch nicht)

Qt gibt es noch länger als .NET und es wird vermutlich ebenfalls nicht 
morgen abgekündigt.

> - C# ist potentiell sicherer als C++. C# wird zu Bytecode compiliert
> (Intermediate Language, IL) und interpretiert. C++ ist Maschinencode.
> Remote Code Execution oder Out-of-Bounds-Speicherzugriffe sind in IL,
> wenn überhaupt, nur viel schwieriger durchführbar.

Das behaupten die Java-Leute auch gerne... Die Erfahrung zeigt jedoch, 
daß es auch mit C# und Java möglich ist, unsichere Programme zu 
schreiben.

Letztlich erhöht die Runtime Engine die Komplexität des Softwaresystems 
-- das ist einer der Gründe dafür, warum C# und Java meist langsamer 
sind als C++ -- und eine höhere Komplexität führt eben leider auch zu 
einer höheren Wahrscheinlichkeit von Fehlern und Sicherheitsproblemen, 
zu einem höheren Ressourcenverbrauch und zu einer geringeren Performanz.

Das mag bei GUI-Anwendungen meistens keine größeren Probleme bereiten, 
im Echtzeit-Umfeld muß man aber genau auf solche Dinge achten.

> - Garbage-Collection. Ja, das kann man auch in C++ haben, soweit ich das
> verstanden habe muss man aber aufpassen nichts zu vergessen. In C# ist
> es umgekehrt, man muss sich Mühe geben damit sie versagt.

Garbage Collection ist bei Echtzeitanwendungen leider oft problematisch, 
weil sie nämlich gerne ausgerechnet dann zuschlägt, wenn gerade größere 
Datenmengen zur Verarbeitung anstehen. Das führt regelmäßig zu 
Problemen, welche nur in Abhängigkeit vom Laufzeitzustand auftreten und 
daher schwer zu debuggen und noch viel schwerer zu beheben sind.

In modernem C++ mit RAII ist die Speicherverwaltung auch kein so großes 
Thema mehr, weil sich da schon der Compiler um viele Dinge kümmern kann.

> Größter Nachteil von C#: es ist deutlich langsamer als C++.

Richtig.

Insofern: wenn die Echtzeit-Anforderungen nicht allzu hoch sind, keine 
hochgenaue Kontrolle über den Programmlauf notwendig und es kein Problem 
ist, sich von einem Hersteller und seiner Plattform abhängig zu machen, 
dann kann man jederzeit C# und .NET benutzen. Wenn irgend eines dieser 
Dinge Kopfschmerzen bereitet oder ohnehin man bereits C++ kann, dürfte 
hingegen dieses die bessere Wahl sein. Letztlich erkauft man sich etwas 
Komfort bei der Entwicklung zum Preis von Kontrolle, Ressourcenverbrauch 
und Performanz.

von Sheeva P. (sheevaplug)


Lesenswert?

Reginald L. schrieb:
> Fitzebutze schrieb:
>> C# ist nix für Industriesteuerungen.
> Ich merke auch immer mehr, dass ich hier immer öfter auf die
> WinAPI-Funktionen zugreifen muss.
>
> Fitzebutze schrieb:
>> MFC ist IMHO "Broken by design", es
>> gibt da deutlich besseres wie Qt oder auch wxWidgets.
> Was meinst du damit genau? Was mich hier stört sind die Verrenkungen um
> eine akzeptable GUI aufzubauen. Das finde ich bei C# eben auch so toll.

Mir scheint, Du hast Deine Wahl bereits getroffen. Wenn nicht, dann 
schau Dir mal Qt an -- und sag mir dann bitte, wo Du da Verrenkungen 
siehst.

> Ich glaube das ist wohl auch das hauptsächliche Problem, dass ich mit
> MFC zur Zeit habe und deshalb wechseln möchte. Hast du da einen Tipp,
> mit was ich am besten die GUI designen könnte? Unter MFC habe ich es ja
> mit dem Ressource-Editor gemacht, ein Witz gegen den Designer unter C#.

Für Qt gibt es den Qt Designer, um einzelne GUI-Komponenten zu designen, 
oder eine komplette IDE namens QT Creator.

Da Du oben erwähnst, daß Dir XAML gefällt: etwas ganz Ähnliches bietet 
Qt mit QML beziehungsweise der Qt Designer, der XML-Beschreibungen der 
mit ihm gebauten GUI-Komponenten erzeugt.

von Karl Käfer (Gast)


Lesenswert?

Reginald L. schrieb:
> Auf der Qt-Homepage war ich schon, weißt du da wie es mit der
> OpenSource-"Lizenz" aussieht?

Warum Lizenz in Anführungszeichen?

> Muss ich hier den kompletten Code offenlegen oder nur den der GUI?

Weder, noch. Du mußt den Code ohnehin nicht "offenlegen" im Sinne von 
"frei verfügbar machen" oder "veröffentlichen", das ist ein beliebter 
Denkfehler in Bezug auf die GPL. Die verlangt aber nur, daß Du den Code 
und zugehörige Rechte an jene weiter zu geben, denen Du Deine 
Binärprogramme weitergibst -- also zum Beispiel einem Kunden, der Dein 
Programm gekauft hat. Kurz gesagt: Du bist nicht verpflichtet, Deinen 
Code oder Deine Binaries für jedermann zugänglich zu machen. Du bist 
nicht verpflichtet, Deinen Code oder Deine Binaries kostenlos 
weiterzugeben. Die GPL hindert Dich auch nicht daran, Deine Binaries zu 
verkaufen.

Darüber hinaus steht die Qt-Library aber nicht (nur) unter der GPL, 
sondern auch unter der LGPL. Die wiederum sagt, daß Du die Bibliothek 
auch in Deiner proprietären Software benutzen darfst und nicht 
verpflichtet bist, den Code Deiner Software weiterzugeben -- auch nicht, 
wenn Du die Binaries verkaufst. Nur wenn Du etwas an Qt selbst 
veränderst, bist Du dazu verpflichtet, Deine Änderungen zugänglich zu 
machen -- und auch hier wieder nur denen, denen Du Deine Binaries 
gegeben bzw. verkauft hast.

von nanana (Gast)


Lesenswert?

Karl Käfer schrieb:
> Die verlangt aber nur, daß Du den Code
> und zugehörige Rechte an jene weiter zu geben, denen Du Deine
> Binärprogramme weitergibst -- also zum Beispiel einem Kunden, der Dein
> Programm gekauft hat.

Und der (der Kunde) darf dann den Code in Internet hochladen und an alle 
verteilen, oder?

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Sheeva P. schrieb:
> Mir scheint, Du hast Deine Wahl bereits getroffen. Wenn nicht, dann
> schau Dir mal Qt an -- und sag mir dann bitte, wo Du da Verrenkungen
> siehst.
Ja, so ziemlich, aber noch nicht ganz :)
Mit Verrenkungen bei MFC meine ich, bei vielen Dingen das Rad neu 
erfinden zu müssen. Meine µC programmiere ich so ziemlich ohne Libs. 
Hier brauche ich die Echtzeit. Bei Windows ist das für meinen Fall 
absolut unnötig, allein schon aufgrund der Rechenleistung, es erspart 
mir jede Menge Arbeit bestimmte Problemstellungen mit einer Funktion 
lösen zu können, und wird dazu auch noch übersichtlicher.

Sheeva P. schrieb:
> Für Qt gibt es den Qt Designer, um einzelne GUI-Komponenten zu designen,
> oder eine komplette IDE namens QT Creator.
>
> Da Du oben erwähnst, daß Dir XAML gefällt: etwas ganz Ähnliches bietet
> Qt mit QML beziehungsweise der Qt Designer, der XML-Beschreibungen der
> mit ihm gebauten GUI-Komponenten erzeugt.
Den Designer finde ich ja spitze, was mir nicht gefällt ist der Editor, 
da würde ich gerne bei VisualStudio bleiben. Mir stellt sich jetzt auch 
die Frage, warum C++ (in meinem Fall)? Möchte ich bestimmte Sachen mit C 
machen, dann kann ich diese notfalls als Libs einbinden.

Danke auch an Karl, für die Ausführung zur GPL, das klingt interessant, 
werde ich mir genauer anschauen.

von adcap (Gast)


Lesenswert?

Mir scheint hier wird sehr viel vermischt. Mal wird von der 
(Industrie)Steuerung an sich geredet, dann wieder von 
Applikationssoftware...

Also das Szenario ist ja folgendes: Die Steuerung der Wuchtmaschine ist 
bereits implementiert (wie auch immer) und die Daten werden per Ethernet 
übertragen. Die Auswertesoftware soll also wahrscheinlich ausrechnen und 
anzeigen, welches Wuchtgewicht man anbringen muss oder ähnliches.

Also meiner Erfahrung nach: Wenn es um so Sachen wie die angesprochene 
Auswertesoftware geht, dann ganz klar C#/.net. Mit C++ handelt man sich 
da nur Ärger ein, mit C# lassen sich schneller schönere und bessere 
Ergebnisse produzieren. Meiner Erfahrung nach, lassen sich außerdem nach 
mehreren Monaten mit C# leichter wieder Änderungen durchführen, als mit 
C++.

Außerdem kann man sich mit reinem C++ relativ schnell auch unsaubere 
Memoryleaks einhandeln, die dann nach einer gewissen Zeit zu Abstürzen 
führen. C++ bürdet dem Programmierer sehr viel Verantwortung auf, eine 
Verantwortung die man idR bei der Entwicklung von Applikationssoftware 
abstrahieren möchte.

von JJ (Gast)


Lesenswert?

> Also meiner Erfahrung nach: Wenn es um so Sachen wie die angesprochene
> Auswertesoftware geht, dann ganz klar C#/.net. Mit C++ handelt man sich
> da nur Ärger ein, mit C# lassen sich schneller schönere und bessere
> Ergebnisse produzieren. Meiner Erfahrung nach, lassen sich außerdem nach
> mehreren Monaten mit C# leichter wieder Änderungen durchführen, als mit
> C++.
>
> Außerdem kann man sich mit reinem C++ relativ schnell auch unsaubere
> Memoryleaks einhandeln, die dann nach einer gewissen Zeit zu Abstürzen
> führen. C++ bürdet dem Programmierer sehr viel Verantwortung auf, eine
> Verantwortung die man idR bei der Entwicklung von Applikationssoftware
> abstrahieren möchte.

Der Vorteil von .Net ist also, dass man sich keine Mühe geben muss.
Wenn das der Anspruch ist -- ok.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

adcap schrieb:
> Also das Szenario ist ja folgendes: Die Steuerung der Wuchtmaschine ist
> bereits implementiert (wie auch immer) und die Daten werden per Ethernet
> übertragen. Die Auswertesoftware soll also wahrscheinlich ausrechnen und
> anzeigen, welches Wuchtgewicht man anbringen muss oder ähnliches.
Ganz genau, es geht lediglich darum, die im Stream ankommenden Daten zu 
ordnen, analysieren und auszuwerten.

adcap schrieb:
> mit C# lassen sich schneller schönere und bessere
> Ergebnisse produzieren.
Das ist eben meine Anforderung, mit C++ wird der Code im gegensatz zu C# 
ellenlang und unübersichtlich. Für kleinere und kritischere Programme 
wird da C++ klar im Vorteil sein, weil man mehr Freiheiten hat.

adcap schrieb:
> C++ bürdet dem Programmierer sehr viel Verantwortung auf, eine
> Verantwortung die man idR bei der Entwicklung von Applikationssoftware
> abstrahieren möchte.
Auch wieder ein entscheidender Faktor in meinem Fall: Ich programmiere 
noch nicht so lange.

JJ schrieb:
> Der Vorteil von .Net ist also, dass man sich keine Mühe geben muss.
Polemik.

von Robert S. (robert_s68)


Lesenswert?

Reginald L. schrieb:
> Welche Vorteile bzw. Nachteile hätte ich noch bezüglich C++ / C#? Eignet
> sich C# für Industrieanwendungen genauso gut wie C++?

Falls sich das in den letzten 10 Jahren nicht geändert hat ist 
Remote-Debuggen von .net-Applikationen ein riesiger Krampf, vor allem 
wenn man mit einem Notebook einen Leitrechner in einer fremden Domäne 
untersuchen muss.

So weit ich mich erinnere ginge das nur, wenn die Domäne des 
Leitrechners und die des Notebooks eine Vertrauensstellung zueinander 
haben, das kann man eigentlich im Fall eines Industriebetriebs generell 
ausschliessen. Ergo nichts remote-debuggen, im Fall des Falles dann 
entweder eigenen Leitrechner mitnehmen, der aber mit der Aussenwelt dann 
nicht reden kann/darf/will, Entwicklungsumgebung am Leitrechner 
installieren (sehr böse, macht u.U. auch einiges kaputt) und oder nicht 
debuggen.

Ach ja, keine Breakpoints in GUI-Delegates setzen.

MFC ist auch ein Krampf, ein anderer halt.

von Horst (Gast)


Lesenswert?

Reginald L. schrieb:
> Polemik.

Nein da hat er schon recht.

Reginald L. schrieb:
> Den Designer finde ich ja spitze, was mir nicht gefällt ist der Editor,
> da würde ich gerne bei VisualStudio bleiben.

Wenn das dein einziges Problem ist: Es ist eine Unterstützung für diesen 
Basteleditor vorhanden.

von Karl Käfer (Gast)


Lesenswert?

nanana schrieb:
> Karl Käfer schrieb:
>> Die verlangt aber nur, daß Du den Code
>> und zugehörige Rechte an jene weiter zu geben, denen Du Deine
>> Binärprogramme weitergibst -- also zum Beispiel einem Kunden, der Dein
>> Programm gekauft hat.
>
> Und der (der Kunde) darf dann den Code in Internet hochladen und an alle
> verteilen, oder?

Natürlich, das Recht -- und unter bestimmten Umständen eben auch die 
Pflicht -- zur Weitergabe gehören dazu. Die meisten Kunden sind 
allerdings nicht so blöd, Code zu veröffentlichen, den sie selbst teuer 
bezahlt haben. Immerhin würden sie dadurch die Investition in ihren 
Wettbewerbsvorteil invalidieren. Ich gebe meinen Code regelmäßig unter 
GPL an meine Kunden weiter, und bisher ist noch keiner auf die Idee 
gekommen, etwas zu veröffentlichen. Aber selbst wenn es einer tun würde, 
wäre mir das herzlich egal, denn ich habe mein Geld ja schon bekommen 
und der Kunde hat ein Recht auf das, was er bezahlt hat.

von Rolf M. (rmagnus)


Lesenswert?

Reginald L. schrieb:
>> Qt hat auch eigene komfortable Socketklassen.
> Ich bin davon ausgegangen, dass ich Qt ausschließlich für die GUI
> benutze. Mit dem Qt-Editor möchte ich nur ungern arbeiten. Kann ich von
> Qt aus auch direkt WinAPI Funktionen nutzen?

Ja kann man problemlos - braucht man aber eigentlich meist gar nicht.
Qt zwingt dich nicht dazu, irgendeinen bestimmten Editor zu benutzen. Da 
kannst du nehmen, was du willst.

> Rolf M. schrieb:
>> Das soll jetzt hoffentlich keine Empfehlung sein, gegen
>> Lizenzbedingungen zu verstoßen nach dem Motto: Interessiert ja eh
>> keinen.
>> Wer bei der Entwicklung einer kommerziellen Software so vorgeht,
>> verdient es nicht anders, als in Grund und Boden geklagt zu werden.
> Wer keine 300 Dollar monatlich für eine Lizenz ausgeben kann, der hat es
> auch nicht verdient zu programmieren!

Du meinst nicht, dass was falsch läuft, wenn jemand Geld mit 
Software-Entwicklung verdient und das auf Basis von geklauter Software 
tut?

Reginald L. schrieb:
> Den Designer finde ich ja spitze, was mir nicht gefällt ist der Editor,
> da würde ich gerne bei VisualStudio bleiben.

Dann tu das doch. Qt kann man auch in VisualStudio integrieren.
http://doc.qt.io/vs-addin/

von Arc N. (arc)


Lesenswert?

Sheeva P. schrieb:
> Das stimmt, aber dafür hat man weniger Kontrolle über den genauen
> Ablauf. Das kann bei Echtzeitanwendungen zu erheblichen Problemen
> führen.

Nicht bzw. nur zum Teil vorhersehbar ist die GC.
Ab 4.6 gibt es GC.TryStartNoGCRegion
https://msdn.microsoft.com/de-de/library/dn906201%28v=vs.110%29.aspx
Der Rest ist genauso vorhersehbar wie in C++ auch: Von sehr gut bis gar 
nicht.

> Das behaupten die Java-Leute auch gerne... Die Erfahrung zeigt jedoch,
> daß es auch mit C# und Java möglich ist, unsichere Programme zu
> schreiben.

Anzahl der Sandbox-Ausbrüche bei .NET vs. Java? Und das obwohl die 
Quelltexte seit Jahren unter http://referencesource.microsoft.com/ 
liegen.

> Letztlich erhöht die Runtime Engine die Komplexität des Softwaresystems
> -- das ist einer der Gründe dafür, warum C# und Java meist langsamer
> sind als C++ -- und eine höhere Komplexität führt eben leider auch zu
> einer höheren Wahrscheinlichkeit von Fehlern und Sicherheitsproblemen,
> zu einem höheren Ressourcenverbrauch und zu einer geringeren Performanz.

Sprachs und nannte weiter oben Qt...
Quelltext .NET 4.6.1 ~338 MB, QT 5.6 ~1418 MB


> Garbage Collection ist bei Echtzeitanwendungen leider oft problematisch,
> weil sie nämlich gerne ausgerechnet dann zuschlägt, wenn gerade größere
> Datenmengen zur Verarbeitung anstehen.

Da könnte noch lange OT über die verschiedenen GC-Ansätze für harte 
Echtzeit diskutiert werden... JamaicaVM wäre ein Stichwort

> In modernem C++ mit RAII ist die Speicherverwaltung auch kein so großes
> Thema mehr, weil sich da schon der Compiler um viele Dinge kümmern kann.

Da oben schon von unsicheren Programmen die Rede war: Das sieht man bei 
C++ täglich in div. Browsern...

> Letztlich erkauft man sich etwas
> Komfort bei der Entwicklung zum Preis von Kontrolle, Ressourcenverbrauch
> und Performanz.

Etwas Komfort? Wenn Komfort auch Lesbarkeit, Wartbarkeit und 
Kleinigkeiten wie REPL etc. einschließt war C# gegenüber C++ z.T. schon 
recht deutlich besser und erst mit C++11/14 wurde letzteres etwas 
komfortabler. C++ gegenüber anderen GC-Sprachen insb. auch guten, 
funktionalen Sprachen: Da wird C++ immer sehr deutlich 
hinterherhinken...

Robert S. schrieb:
> So weit ich mich erinnere ginge das nur, wenn die Domäne des
> Leitrechners und die des Notebooks eine Vertrauensstellung zueinander
> haben, das kann man eigentlich im Fall eines Industriebetriebs generell
> ausschliessen. Ergo nichts remote-debuggen, im Fall des Falles dann
> entweder eigenen Leitrechner mitnehmen, der aber mit der Aussenwelt dann
> nicht reden kann/darf/will, Entwicklungsumgebung am Leitrechner
> installieren (sehr böse, macht u.U. auch einiges kaputt) und oder nicht
> debuggen.

Wie man's macht, so ist's verkehrt... Hätte MS das einfach zugelassen, 
hätten sie von allen Seiten - zu Recht - einen auf den Deckel bekommen, 
ist es etwas komplizierter, gibt's auch einen auf den Deckel..
https://msdn.microsoft.com/en-us/library/9y5b4b4f%28v=vs.100%29.aspx
http://www.codeproject.com/Tips/618804/Remote-debugging-for-Visual-Studio-from-different

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Rolf M. schrieb:
> Du meinst nicht, dass was falsch läuft, wenn jemand Geld mit
> Software-Entwicklung verdient und das auf Basis von geklauter Software
> tut?
Machen die Chinesen jeden Tag, nicht nur im Softwarebereich, und das ist 
auch gut so.

von Pandur S. (jetztnicht)


Lesenswert?

Was soll Qt mit Echtzeit zu tun haben ? Qt ist GUI, und Echtzeit ist was 
ganz anderes. Das GUI laeuft in einem Prozess(Thread) mit niedriger 
Prioritaet, und dann ist die Ausfuehrungszeit des Qt egal. Der Echtzeit 
Teil muss einfach deterministisch sein, mit jeder Variablen statisch 
alloziert ...

von Der Andere (Gast)


Lesenswert?

Reginald L. schrieb:
> Das ist eben meine Anforderung, mit C++ wird der Code im gegensatz zu C#
> ellenlang und unübersichtlich.

Man kann in jeder Sprache sauber und übersichtlich oder unsauber und 
beschissen programmieren.
Ein neues Tool oder eine andere Programmiersprache hilft dir gar nichts 
wenn du einfach nur wurstelst. Im Gegenteil, jede neue Sprache heisst 
erst mal Lernaufwand und ein Rückschritt in der Effizienz und der 
fehlerquote weil man die Tücken und Fallstricke nicht kennt.

Das ist genauso wie ein schlechter Läufer, der meint mit neuen 
Laufschuhen jetzt die 5000m 4 Minuten schneller laufen zu können.
Oder der schlechte Heimwerker, der meint für 1000de von Euros teuerstes 
Profiwerkzeug kaufen zu müssen.

Es wird dadurch nicht besser!

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Der Andere schrieb:
> Man kann in jeder Sprache sauber und übersichtlich oder unsauber und
> beschissen programmieren.
Das ist schon klar. Andererseits brauchst du für eine Problemstellung 
mit einer Programmiersprache mehr Zeilen (somit unübersichtlicher) als 
mit einer anderen, um diese zu lösen.

Beispiel Netzwerkadapter:
1
// MFC
2
  PIP_ADAPTER_ADDRESSES h_adapters = 0;
3
  ULONG adapters_size = 0;
4
  GetAdaptersAddresses(AF_INET, NULL, NULL, NULL, &adapters_size);
5
  h_adapters = (IP_ADAPTER_ADDRESSES*)MALLOC(adapters_size);
6
  GetAdaptersAddresses(AF_INET, NULL, NULL, h_adapters, &adapters_size);
7
8
// WPF
9
  NetworkInterface[] alladapters = NetworkInterface.GetAllNetworkInterfaces();

Und das zieht sich so durchs ganze Programm, mit wenigen Ausnahmen. Der 
Code wird länger und unübersichtlicher. Vielleicht nicht unbedingt 
sicherer, da ich aber Anfänger bin, kommt mir das schon zu Gute.

von Robert L. (lrlr)


Lesenswert?


von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Robert L. schrieb:
> das ist doch nicht die MFC
>
> sondern die WinAPI
Weil MFC hierfür keinen Wrapper hat. Mir ging es lediglich darum, 
aufzuzeigen, dass Codeschnipsel für eine Problemstellung mit MFC 
generell länger werden als mit C# (zumindest für das, was ich bisher mit 
C# gemacht habe). Ich finde es schon praktisch, wenn mir die 
Programmiersprache simple Problemstellungen erleichtert, anstatt, dass 
ich eine ellenlange Funktion hierfür schreiben muss. So einfach wie 
möglich, so kompliziert wie nötig.

von Rolf M. (rmagnus)


Lesenswert?

Reginald L. schrieb:
> Ich finde es schon praktisch, wenn mir die
> Programmiersprache simple Problemstellungen erleichtert, anstatt, dass
> ich eine ellenlange Funktion hierfür schreiben muss.

Das macht nicht die Sprache, sondern die API. Bei C++ (mit Qt) sieht der 
Code z.B. so aus:
1
auto interfaces = QNetworkInterface::allInterfaces();

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Rolf M. schrieb:
> Das macht nicht die Sprache, sondern die API.
Ja klar, hast recht. Ich denke, was mich auch so bei Microsoft hält, ist 
der Umstand, dass ich ausschließlich bei Windows bleibe.

Habe inzwischen jetzt meine Klassen die in eigenen Threads laufen 
umgeschrieben. Das ist ein Unterschied wie Tag und Nacht im Vergleich zu 
MFC. Was ich auch prima finde, ist, dass sich .Net um eine Schar von 
Kleinigkeiten kümmert. Für meine Zwecke bin ich bisher absolut zufrieden 
mit dem Wechsel zu C#.

Danke nochmals an alle für die hilfreichen Infos und Tipps!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.