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

amiga-news.de Forum > Programmierung > Gadtools Strings [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

19.02.2007, 14:45 Uhr

MaikG
Posts: 5172
Nutzer
Ich hab da noch so einen Fehler im Zusammenhang mit einem String Gadget.
Es schien mir erst so das in dem fall ein Temporärer String reicht,
bis zu diesen Fehler. Hab beim GTST_String jetzt einen festen bereich
genommen. Tritt aber immernoch auf. Kann also nur noch der Text
sein der vor dem Gadget steht.
Ein fester String ist natürlich mehr aufwand als ein Temporärer.

Die eigentlich frage ist also, wie kann ich erkennen ob ein
Fester String benötigt wird oder nicht? Ich hab den 3.9er NDK
hier, aber daraus ist das nicht ersichtlich.

[ - Antworten - Zitieren - Direktlink - ]

19.02.2007, 15:14 Uhr

thomas
Posts: 7717
Nutzer

Bei GT_SetGadgetAttrs wird GTST_String in einen internen Puffer kopiert, du kannst also einen temporären String benutzen.

Bei GT_GetGadgetAttrs bekommst du einen Zeiger auf einen internen Puffer, den du nicht ändern darfst. Hier mußt du also den String in eine eigene Variable kopieren.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

19.02.2007, 15:35 Uhr

MaikG
Posts: 5172
Nutzer
>Bei GT_SetGadgetAttrs wird GTST_String in einen internen Puffer
>kopiert, du kannst also einen temporären String benutzen.

Okay und was ist mit dem Gadget Text(ng_GadgetText)?

Und woran erkennt man das generell?
Es gibt ja mehrere Systemfunktionen die Strings verwenden die
vielleicht dann irgenwann auch so einen schwer zu findenen Fehler
verursachen.

[ - Antworten - Zitieren - Direktlink - ]

19.02.2007, 16:10 Uhr

thomas
Posts: 7717
Nutzer
Zitat:
Und woran erkennt man das generell?

Gesunder Menschenverstand ? Ich hatte bisher nie Probleme damit.

Es hilft natürlich auch, sich mit der Old-Style-Gadgetprogrammierung auseinanderzusetzen. Gadtools ist ja nur ein Layer über der vorhandenen Intuition-Funktionalität. Dann kommst man recht schnell darauf, daß überall, wo in der Gadget-Struktur ein String-Pointer ist, auch ein fester Speicherbereich verwendet werden muß. Und wo wie beim String-Gadget ein Puffer verwendet wird, der auch funktioniert, wenn man keinen String angibt, dann wird wahrscheinlich kopiert.

Nunja, bei C ist das vermutlich auch etwas einfacher, weil String-Konstanten dort nunmal Konstanten sind, die ihrem Namen Ehre machen und nicht auf magische Weise aus dem Speicher verschwinden können.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

19.02.2007, 17:42 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von thomas:
Zitat:
Und woran erkennt man das generell?

Gesunder Menschenverstand ?

Ich würde doch lieber auf die Dokumentation statt "gesunden Menschenverstand" plädieren. Auch, wenn Du vielleicht nicht mehr bei jedem Detail sagen kannst, wann und wo Du es zum ersten Mal gelesen hast...
Zitat:
Nunja, bei C ist das vermutlich auch etwas einfacher, weil String-Konstanten dort nunmal Konstanten sind, die ihrem Namen Ehre machen und nicht auf magische Weise aus dem Speicher verschwinden können.
Auch Basic-Konstanten sind im Allgemeinen Konstanten. Nur fehlt scheinbar die Intelligenz, um "Bla"+CHAR$(0) als compile-time Konstante zu erkennen.

In einer richtigen Anwendungen relativiert sich das, weil normalerweise alle UI-Strings aus einem catalog der locale.library stammen und das Handling für Basic und C dabei gleich ist.

mfg

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

[ - Antworten - Zitieren - Direktlink - ]

19.02.2007, 18:33 Uhr

MaikG
Posts: 5172
Nutzer
>Gesunder Menschenverstand ? Ich hatte bisher nie Probleme damit.

Programmierst ja auch in C. Ich dachte das es vielleicht irgendwo
steht.
Die Basic beispiele sind da irgendwie total dämlich, vermitteln
einen das es so Funktionieren soll.
Es gibt ja direkt eine Setng_GadgetText Sub, die nichts anders
macht als die Adresse des Strings zu übergeben...

Beim Textgadget hab ich zum beispiel gesehen das es optional den
String kopieren kann. Hab jetzt aber eh alle gegen den Text befehl
ausgetauscht.

>Es hilft natürlich auch, sich mit der Old-Style-Gadgetprogrammierung
>auseinanderzusetzen. Gadtools ist ja nur ein Layer über der
>vorhandenen Intuition-Funktionalität.

Ich hab nur mit Gadtools angefangen Intuition sah mir nicht schön genug aus...


>Auch Basic-Konstanten sind im Allgemeinen Konstanten. Nur fehlt scheinbar die Intelligenz, um "Bla"+CHAR$(0) als compile-time Konstante zu erkennen.

Es gibt bei Basic leider nur Numerische Konstanten.
Also sollte man möglichst alle Strings fest halten ausser man weiss
es genau das es nicht sein muss.

Habs jedenfalls schon umgerüstet, funktioniert jetzt.
Danke euch.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Gadtools Strings [ - Suche - Neue Beiträge - Registrieren - Login - ]


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