ReAction GUI in C++

...für und mit Amiga OS4

Moderator: OS4Welt-Team

Antworten
ThorstenS
Beiträge: 310
Registriert: 24. Oktober 2014 15:51
Hat sich bedankt: 23 Mal
Danksagung erhalten: 5 Mal

ReAction GUI in C++

Beitrag von ThorstenS »

Heute wollte ich mal eine Pause von den Übungen aus dem Buch - C++ für Kids - einlegen um mich mal dem erstellen von ReAction-GUIs zu widmen. Scheinbar keine einfache Aufgabe...

Nachdem ich mir zunächst so einige Webseiten im Netz angesehen habe u.a. wiki.amigaos.net habe ich sodenn ein paar Codebeispiele aus dem SDK probiert. Durch Copy&Paste habe ich den Quellcode in Codebench kopiert und dann kompiliert. Der Compiler hat bei jedem Code Fehler angezeigt.

Jetzt frage ich mich zunächst, muss ich in Codebench noch eine andere Einstellung vornehmen?
Ich frage mich auch, lassen sich ReAction-GUIs überhaupt mit C++ (und seinem Compiler) umsetzen (auch was die zugelinkten Includes angeht)?
Sind die Beispielcodes vielleicht nicht mehr ganz kompatibel zum neuen SDK?


Hat jemand einen kleinen Source der funktioniert?

Oder hat @Cyborg recht, wenn er sagt, dass mir C++ auf dem AMIGA mehr Ärger als Nutzen einbringt? ;)
Benutzeravatar
Cyborg
AmigaOS Entwickler
Beiträge: 3505
Registriert: 28. September 2009 11:10
Hat sich bedankt: 12 Mal
Danksagung erhalten: 32 Mal

Re: ReAction GUI in C++

Beitrag von Cyborg »

Natürlich habe ich recht ;)

Dennoch ist es selbstverständlich möglich, ReAction-Programme in C++ zu schreiben. Der von mir inzwischen betreute AutoDocViewer ist z.B. in C++ geschrieben. Die Beispiel-Quellen aus dem SDK funktionieren. Wenn Sie das nach Deiner Kopieraktion nicht mehr tun, liegt der Fehler nicht bei ihnen ;)

Gibt doch mal ein konkretes Beispiel.
.. der SysOp hat immer recht :evil:

PGP Schlüssel verfügbar
kas1e
Beiträge: 73
Registriert: 24. Dezember 2016 17:10
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: ReAction GUI in C++

Beitrag von kas1e »

@ThorstenS
One of big today's examples of how looks like Reaction based app writeen on C++ are spotless debugger, code is here : https://github.com/alfkil/Spotless (see Reaction dir for)
ThorstenS
Beiträge: 310
Registriert: 24. Oktober 2014 15:51
Hat sich bedankt: 23 Mal
Danksagung erhalten: 5 Mal

Re: ReAction GUI in C++

Beitrag von ThorstenS »

Cyborg hat geschrieben: 21. November 2022 12:35
Gibt doch mal ein konkretes Beispiel.
Gerne!

Nehmen wir den Code von

SDK:Examples/GUI/Window/Window.c

Codebench ist geöffnet und ich füge den Quelltext von - Window.c - über Insert text from file... ein. Nun lasse ich kompilieren und erhalte folgende Fehlermeldung:
ReAction01.jpg
Ein Problem in Zeile 46. Also öffne ich jetzt den AutoDocViewer und rufe mir das - exec.doc - auf und suche nach - AllocSysObject -. Ich schaue mir das Beispiel in dem Text an und sehe, dass die Formatierung in "meinem" (übernommenen) Code falsch ist.

Aktuell steht dort:

Code: Alles auswählen

struct MsgPort *AppPort = IExec->AllocSysObjectTags(ASOT_PORT, TAG_DONE);
Und so muss er nach dem Beispiel im AutoDocViewer aussehen:

Code: Alles auswählen

struct MsgPort *AppPort;
AppPort = (struct MsgPort *)IExec->AllocSysObjectTags(ASOT_PORT, TAG_DONE);
So nachdem ich das in meinem Code geändert habe und neu kompiliere, ist die alte Fehlermeldung weg, es kommen aber neue folgende Fehlermeldungen:
ReAction02.jpg
Damit kann ich jetzt so gar nichts anfangen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
FlynnTheAvatar
Beiträge: 72
Registriert: 23. Juni 2022 11:19
Hat sich bedankt: 3 Mal
Danksagung erhalten: 3 Mal

Re: ReAction GUI in C++

Beitrag von FlynnTheAvatar »

Hi Thorsten,

das Beispiel muss mit der libauto.a gelinkt werden. Das steht ganz oben in der Datei. Also müsstest du -lauto zu den Linker-Flags hinzufügen.
AmigaOne X5000/20, 2.0 Ghz, 4 GB RAM, 240 + 120 GB SSD, Radeon RX 550, ESI Juli@, SIL 3114
Amiga 500, ACA 500+, ACA1221LC, AmigaOS 1.3 + 3.2.2.1
Amiga 500, Checkmate 1500, Vampire 500V2, AmigaOS 3.2.1 (WIP)
ThorstenS
Beiträge: 310
Registriert: 24. Oktober 2014 15:51
Hat sich bedankt: 23 Mal
Danksagung erhalten: 5 Mal

Re: ReAction GUI in C++

Beitrag von ThorstenS »

FlynnTheAvatar hat geschrieben: 21. November 2022 15:44
das Beispiel muss mit der libauto.a gelinkt werden. Das steht ganz oben in der Datei. Also müsstest du -lauto zu den Linker-Flags hinzufügen.
DANKE!
004.png
-lauto das war es tatsächlich. Ich freue mich!! :) Könnte mich aber auch in den Arsch treten, dass ich nicht drauf gekommen bin. Wahrscheinlich deshalb, weil ich dachte, dass das Linker-Argument -lstdc++ ausreichend sein würde. Da... die Quelltexte vor allem in der Sprache "C" vorliegen und nicht "C++". Okay, jetzt weiß ich es. Also nochmals DANKESCHÖN!

Heute war, was das angeht, ein guter Tag. Der Lust auf mehr macht...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
Cyborg
AmigaOS Entwickler
Beiträge: 3505
Registriert: 28. September 2009 11:10
Hat sich bedankt: 12 Mal
Danksagung erhalten: 32 Mal

Re: ReAction GUI in C++

Beitrag von Cyborg »

Schön :)

Was den ersten "Fehler" angeht, das kommt daher, weil die Beispiele alle schon ein paar Jährchen auf dem Buckel haben und damals der GCC noch nicht standardmäßig über implizite Casts gemeckert hat. Die neueren und insbesondere das C++-Frontend sehen das deutlich kritischer und spucken Warnings, die dann durch -Werror zum Fehler werden. Ist sinnvoll, aber macht es mit älterem Code halt etwas umständlicher.
.. der SysOp hat immer recht :evil:

PGP Schlüssel verfügbar
Benutzeravatar
ZeroG
OS4Welt-Team
Beiträge: 2656
Registriert: 25. September 2009 18:19
Danksagung erhalten: 6 Mal

Re: ReAction GUI in C++

Beitrag von ZeroG »

ThorstenS hat geschrieben: 21. November 2022 15:58
-lauto das war es tatsächlich. Ich freue mich!! :) Könnte mich aber auch in den Arsch treten, dass ich nicht drauf gekommen bin. Wahrscheinlich deshalb, weil ich dachte, dass das Linker-Argument -lstdc++ ausreichend sein würde. Da... die Quelltexte vor allem in der Sprache "C" vorliegen und nicht "C++". Okay, jetzt weiß ich es. Also nochmals DANKESCHÖN!
Hat nix mit C vs C++ zu tun.

libstdc++ und libauto sind Funktionsbibliotheken für unterschiedliche Zwecke.

libstdc++ ist die standard C++ Laufzeitumgebung, und beinhaltet z.B. den Code für sowas für cout.

libauto kommt von AmigaOS und beinhaltet Code der automatisch so ziemlich alle Libaries und deren Interfaces beim Programmstart öffnet und beim beenden wieder schließt. Es findet keine Versionsprüfung der Libraries statt, das sollte man in einem echten Programm nachholen oder am besten gleich alles was man braucht selber öffnen und schließen.

Wenn du keine Funktionen benutzt die in einer Funktionsbibliothek sind kannst du die beim Linken weglassen.
Antworten