amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Reaction mit GCC [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

29.12.2002, 04:56 Uhr

Saint
Posts: 68
Nutzer
Hi!

Ich versuche mich hier seit einiger Zeit an Reaction Programmierung in C mit GCC V2.95.3 als Compiler.
Zum erstellen der GUI habe ich Reactor benutzt. Ich stehe jetzt vor zwei Problemen die mich noch irre machen:

1. Wenn ich irgendwo in Reactor einen Text angebe, sei es nur ein "Test" auf einem Button, spuckt GCC beim linken eine Fehlermeldung aus. Ich habe dem Knopf die Locale ID "btButton_1" gegeben, die Fehlermeldung ist:

gui.o(.data+0x26a): undefined reference to 'btButton_1'
gui.o(.data+0x26e): undefined reference to 'btButton_1_STR'

Wenn ich nirgendwo in der GUI Strings benutze linkt er es normal durch.

2. Das WMHI_GADGETUP Event scheint sich nicht abfragen zu lassen. Ich habe bisher nur eine mehr als simple Gui mit einem Button und einem String gadget gemacht, aber ich kann auf den Button klicken wie ich möchte, es kommt kein WMHI_GADGETUP. WMHI_CLOSEWINDOW wird korrekt erkannt, auf andere events habe ich es noch nicht getestet.

Irgendwie bin ich ratlos, besonders weil der einzige Workshop den ich zu Reaction finden konnte (in einer AmigaAktuell) ein ganz anderes System der Gui Erstellung benutzt (direkt im Quelltext statt über ein gelinktes Objekt File), und sämtliche Beispiele für StormC gedacht sind.
Währe klasse wenn mir jemand helfen könnte, ich möchte nicht ewig an Reaction zu knabbern haben...

MfG
Markus Castro

[ - Antworten - Zitieren - Direktlink - ]

29.12.2002, 17:36 Uhr

cygnusEd
Posts: 104
Nutzer
Hallo Saint!

Zu 1:

Welche Dateien hast Du in Deinem Projekt? Hast Du mithilfe von
CatComp aus der von Reactor erzeugten Datei "xxx.cd" die zwei
Dateien "xxxCD.h" und xxxCD.asm" erzeugt?
Und wenn ja, hast Du einen globalen #define "CATCOMP_ARRAY" erzeugt?
Wenn nicht, dann werden keine Texte und keine TextIDs erzeugt.
Schau mal in die Datei "xxxCD.asm" und Du wirst sehen warum.

Zu 2:

Hast Du in Reactor für jedes Gadget die Tags "GA_ID" und "GA_RelVerify"
erzeugt? Sonst werden nämlich für dieses Gadget keine Messages erzeugt.

Grüße
CygnusEd

[ - Antworten - Zitieren - Direktlink - ]

29.12.2002, 20:43 Uhr

Saint
Posts: 68
Nutzer
Zitat:
Original von cygnusEd:

Welche Dateien hast Du in Deinem Projekt?


my-gui.c, Gui.o, Gui.res, Gui.h und Gui.cd

Zitat:
Hast Du mithilfe von

CatComp aus der von Reactor erzeugten Datei "xxx.cd" die zwei

Dateien "xxxCD.h" und xxxCD.asm" erzeugt?


Nein, hatte ich nicht. Ich habe jetzt die Header Datei erzeugt und includet, benötige ich das Assembler File auch noch?

Wie ich das sehe sollte das .h File ausreichen.

Zitat:
Und wenn ja, hast Du einen globalen #define "CATCOMP_ARRAY" erzeugt?

Wenn nicht, dann werden keine Texte und keine TextIDs erzeugt.

Schau mal in die Datei "xxxCD.asm" und Du wirst sehen warum.


Man, was man alles beachten muß....hab den define erzeugt, das Header File includet, aber die Fehlermeldung beim linken bleibt.

Zitat:
Zu 2:


Hast Du in Reactor für jedes Gadget die Tags "GA_ID" und "GA_RelVerify"

erzeugt? Sonst werden nämlich für dieses Gadget keine Messages erzeugt.


Nein, davon wußte ich nichts. Hab es so gemacht und jetzt funktioniert zumindest das schonmal :-)

Währ doch gelacht wenn wir das andere nicht auch noch hinbekommen, liegt im Endeffekt bestimmt wieder an irgendwas total dummen an irgendeiner anderen Stelle...

Riesengroßen Dank jedenfalls schonmal für deine Hilfe, ist lange her dass mir in einem Forum geholfen wurde =)

MfG
Markus

[ - Antworten - Zitieren - Direktlink - ]

30.12.2002, 11:18 Uhr

cygnusEd
Posts: 104
Nutzer
Hi Saint!

Ist doch schon mal ein Erfolg :)

Leider muß das asm-File auch noch eingebunden werden. Das von Reactor
erzeugte object-file benötigt die darin enthaltenen Strings und IDs.

Nur noch mal zur Sicherheit. Um die beiden Dateien "guiCD.h" und "guiCD.asm"
zu erzeugen, muß catcomp folgendermaßen aufgerufen werden:

catcomp gui.cd CFILE guiCD.h ASMFILE guiCD.asm XDEF


Zugegebenermaßen war ich nicht ganz korrekt. Für den C-Code benötigst
Du den #define "CATCOMP_NUMBERS" und für den ASM-Code die Definition
"CATCOMP_ARRAY SET 1". Dann müßte es gehen. ;)


CU
CygnusEd

[ - Antworten - Zitieren - Direktlink - ]

30.12.2002, 19:19 Uhr

Saint
Posts: 68
Nutzer
Zitat:
Original von cygnusEd:

Leider muß das asm-File auch noch eingebunden werden. Das von Reactor

erzeugte object-file benötigt die darin enthaltenen Strings und IDs.


Ich versteh zwar nicht viel von Assembler, aber die Definitionen in der .s und der .h Datei sehen mir relativ gleich aus.

Davon abgesehen hab ich es auch mit viel rumprobieren nicht geschafft, das Assembler File einzubinden. Der gcc Assembler hört nämlich fast nicht mehr auf mit den Fehlermeldungen :-(

CatComp kann auch ein Objekt File erzeugen wie ich gesehen habe, aber auch damit Pustekuchen. Kannst du mir sagen was ich ganz genau im einzelnen machen muß, und wie ich GCC dann aufrufen muß?

Zitat:
Zugegebenermaßen war ich nicht ganz korrekt. Für den C-Code benötigst

Du den #define "CATCOMP_NUMBERS" und für den ASM-Code die Definition

"CATCOMP_ARRAY SET 1". Dann müßte es gehen. ;)


Der #define CATCOMP_NUMBERS wird im guicd.h File automatisch gesetzt, wenn der CATCOMP_ARRAY definiert ist, daran lag es also auch nicht...

Wegen solchen blöden Anlaufschwierigkeiten habe ich mich jahrelang vor C gedrückt :(
Arexx war so viel einfacher...

Achja, ich hab noch ein bißchen rumprobiert. Meine Überlegung war den Buttons ihre Texte nach Programmstart zu geben, solange ich das Problem noch nicht gelöst habe. Ich setze also den Gadgettext mit

SetAttrs(gadlist[gadget],GA_Text,pl,TAG_DONE);
SetGadgetAttrs((Gadget *)gadlist[gadget],Fenster,NULL,GA_Text,text,TAG_DONE);

Aber das Gadget wird erst mit dem Text angezeigt, wenn das Fenster z.b. durch Vergrößern neugezeichnet wird. Eine Ahnung woran das liegen könnte?

MfG
Markus C.

[ - Antworten - Zitieren - Direktlink - ]

30.12.2002, 19:53 Uhr

cygnusEd
Posts: 104
Nutzer
Hallo Saint,

Tja, das passiert, wenn ein StormC-Benutzer einem GCC-Benutzer etwas
erklärt ;)
Bei StormC wird der im Projekt eingebundene ASM-Code automatisch mit
dem PhxAss-Assembler übersetzt. Bei GCC kenne ich mich nicht so aus.
Anscheinend hat GCC Probleme mit dem ASM-Code von catcomp. Vielleicht
hilft es ja, diesen Code zuvor mit einem Assembler in eine Object-Datei
umzuwandeln und dann hinzuzulinken ?(

Das mit der Idee, die Texte nachträglich zu setzen würde zwar klappen,
würde aber sehr viel Mehrarbeit bedeuten.

Ich weiß, daß es Dir nicht direkt weiterhilft, aber wie wär's mit StormC 3.0?
Ist auf der Developer CD 2.1 zu finden und ist in der Bedienung meiner
Meinung nach viel einfacher. Die Developer-CD ist - wie ich finde - sowieso
ein Muß.

Grüße
CygnusEd


[ - Antworten - Zitieren - Direktlink - ]

30.12.2002, 22:06 Uhr

Saint
Posts: 68
Nutzer
Zitat:
Original von cygnusEd:

Anscheinend hat GCC Probleme mit dem ASM-Code von catcomp. Vielleicht

hilft es ja, diesen Code zuvor mit einem Assembler in eine Object-Datei

umzuwandeln und dann hinzuzulinken ?(


Habs hier eben mit Phxass versucht, der spuckt auch einige Fehler aus.

Zitat:
Das mit der Idee, die Texte nachträglich zu setzen würde zwar klappen,

würde aber sehr viel Mehrarbeit bedeuten.


Außerdem bleibt noch das Refresh Problem...da weißt du nicht zufällig weiter?

Zitat:
Ich weiß, daß es Dir nicht direkt weiterhilft, aber wie wär's mit StormC 3.0?

Ist auf der Developer CD 2.1 zu finden und ist in der Bedienung meiner

Meinung nach viel einfacher. Die Developer-CD ist - wie ich finde - sowieso

ein Muß.


Hab die CD hier, aber StormC ist nicht so mein Fall. Ich hab mich jetzt schon einigermaßen an GCC gewöhnt, und wenn ich später mal z.b. auf MorphOS umsteigen will bräuchte ich sowieso GCC.

Habs auch eben mal mit StormC probiert, an meinem Programmen meckert er bei 6 Sachen wo GCC nur Warnungen ausspuckt, und das Assembler File kriegt er auch nicht übersetzt :-(

Du weißt nicht zufällig nen guten Workshop zu Mui?

MfG
Markus

[ - Antworten - Zitieren - Direktlink - ]

31.12.2002, 17:13 Uhr

cygnusEd
Posts: 104
Nutzer
Hallo Saint,

> Habs hier eben mit Phxass versucht, der spuckt auch einige Fehler aus.

Ist ja seltsam - habe noch nie probleme mit dem ASM-File gehabt. Wenn Du
möchtest, kannst Du es mir ja mal per email schicken (eschwan@rz-online.de).


> Außerdem bleibt noch das Refresh Problem...da weißt du nicht zufällig weiter?

Mit der Intuition-Funktion RefreshGList() geht's:

Object *WindowObject;
struct Window *IWindow;
...
DoMethod(WindowObject, WM_OPEN); /* Reactor-Fenster öffnen */
...
GetAttr(WINDOW_Window, WindowObject, (ULONG *) &IWindow); /* Intui-Window holen */
...
RefreshGList(IWindow->FirstGadget, IWindow, NULL, -1); /* Komplettes Fenster refreshen */



> Du weißt nicht zufällig nen guten Workshop zu Mui?

Leider nicht - bin ein Reaction-Fan. Aber kennst Du den Reaction-Workshop vom
Amiga-Magazin? Zu finden unter

http://www.amiga-magazin.de/magazin/alteausgaben.html


in den Ausgaben 12/99 bis 2/00.

Wenn Du Beispiel-Code benötigst, dann lade doch aus dem Aminet "FlashMandelWOS"
herunter, das ich zusammen mit Dino Papararo entwickele ;) :

gfx/fract/FlashMandelWOS.lha

Die Dateien mit "...React.c" am Ende sind für das Reaction-Handling verantwortlich.


mfg
CygnusEd

[ - Antworten - Zitieren - Direktlink - ]

02.01.2003, 14:16 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Saint:
SetAttrs(gadlist[gadget],GA_Text,pl,TAG_DONE);
SetGadgetAttrs((Gadget *)gadlist[gadget],Fenster,NULL,GA_Text,text,TAG_DONE);

Aber das Gadget wird erst mit dem Text angezeigt, wenn das Fenster z.b. durch Vergrößern neugezeichnet wird. Eine Ahnung woran das liegen könnte?

Das Setzen der Attribute muß nicht zwangsläufig das Gadget neuzeichnen. Wenn der Rückgabewert ungleich 0 ist, solltest Du einen manuellen Refresh auslösen.
code:
if( SetGadgetAttrs((Gadget *)gadlist[gadget],Fenster,NULL,GA_Text,text,TAG_DONE) )
  RefreshGList((Gadget *)gadlist[gadget], Fenster, NULL, 1);

Das hält Dir auch die Möglichkeit offen, zuerst mehrere Gadgets zu manipulieren und dann alle in einem Refresh neuzuzeichen.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

03.01.2003, 10:55 Uhr

cygnusEd
Posts: 104
Nutzer
Hallo Saint

Ich wollte nur mal fragen, ob die email angekommen ist :)

Grüße
CygnusEd

[ - Antworten - Zitieren - Direktlink - ]

03.01.2003, 16:04 Uhr

Saint
Posts: 68
Nutzer
Hi!

Jo, die Mail ist angekommen, Riesendankeschön!

Nach einigem Rumprobieren mit StormC und phxass bin ich (nach über einer Stunde :Þ) auch endlich dahintergekommen, wieso der bei mir mit dem Assembler File probleme hatte.

PhxAss hat ganz einfach das types.i include nicht gefunden. Bei meiner GCC Installation sind keine Assembler Includes dabei, aber ich dachte von StormC aus gestartet hätte er schon das korrekte Include finden müßen. Naja, manuell gestartet und IncludePath auf die Developer CD gelenkt und plötzlich geht es und auch GCC ist wunderbar happy mit dem Objektfile :-)

Danke auch für deine Korrekturen, ich denke mal die Dreher mit dem Intuition/Reaction Window waren der Grund für sporadische Abstürze. Jetzt funzt aber alles so, wie es soll :)

MfG
Markus C.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Reaction mit GCC [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.