Der Unterschied ist das .l ein DoubleWord ist und .Long eine Struktur, welche ein DoubleWord enthält.Xaby hat geschrieben: Also es funktioniert schon. Allerdings frag ich mich, wo der Unterschied zwischen .l und .Long ist.
Variablen-Übergabe an Prozedur
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
> Und mit *Variable\l ... wenn man drauf zugreifen will (wenn Longint)
nein.
wenn es ein pointer ist, der als pointer auf eine Long strukturiert ist.
dafür die Structure .LONG
...lies doch mal den beitrag von srod, den ich dir verlinkt hab...
nein.
wenn es ein pointer ist, der als pointer auf eine Long strukturiert ist.
dafür die Structure .LONG
...lies doch mal den beitrag von srod, den ich dir verlinkt hab...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
So wie es hier für numerische Variablen gezeigt wurde, funktioniert es nicht für Stringvariablen:
Wie muss obige Prozedur aussehen, damit am Ende "Hallo Welt" angezeigt wird?
Gruß, Little John
Code: Alles auswählen
;-- PB 4.02
EnableExplicit
Procedure Aendere_String (*var.string)
*var\s + " Welt" ;-> Invalid memory access.
EndProcedure
Define text.s
text = "Hallo"
Aendere_String(@text)
Debug text
Gruß, Little John
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
weiß ich nich genau....
aber ein string ist grundsätzlich schon ein pointer (nämlich in den string-pool)
so wie dus gemacht hast, übergibst du also hier nicht den pointer auf den string,
sondern den pointer auf den pointer.
und an der pointer darfst du natürlich nix hintendran schreiben, deswegen IMA.
aber ein string ist grundsätzlich schon ein pointer (nämlich in den string-pool)
so wie dus gemacht hast, übergibst du also hier nicht den pointer auf den string,
sondern den pointer auf den pointer.
und an der pointer darfst du natürlich nix hintendran schreiben, deswegen IMA.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Danke, Kaeru! Nach Deinem Hinweis habe ich ein bißchen 'rumgespielt, und bin dabei auf folgendes gekommen:
Das funktioniert soweit, aber frag mich bitte nicht warum. 
Kann jemand bestätigen, dass das so in Ordnung ist, und nicht zu Speicherlecks oder was-weiß-ich führen kann?
Geht es besser/einfacher?
Gruß, Little John
Code: Alles auswählen
;-- PB 4.02
EnableExplicit
Procedure Aendere_String (addr.l)
Protected *StrPtr.string
*StrPtr = @addr
*StrPtr\s + " Welt"
EndProcedure
Define text.s
text = "Hallo"
Aendere_String(@text)
Debug text

Kann jemand bestätigen, dass das so in Ordnung ist, und nicht zu Speicherlecks oder was-weiß-ich führen kann?
Geht es besser/einfacher?
Gruß, Little John
- ChristianK
- Beiträge: 77
- Registriert: 13.12.2004 14:55
Code: Alles auswählen
Procedure Aendere_String (*addr)
PokeS(*addr,PeekS(*addr)+" Welt")
EndProcedure
Define text.s
text = "Hallo"
Aendere_String(@text)
Debug text
ChristianK for President
- ChristianK
- Beiträge: 77
- Registriert: 13.12.2004 14:55
Dass genug Platz da ist musst du schon dafür sorgen. 
Beweis:

Beweis:
Code: Alles auswählen
Procedure Aendere_String (*addr)
PokeS(*addr,PeekS(*addr)+"############################")
EndProcedure
text$="oooooooooooooooo"
b$="=========================================="
Debug "b$ vorher : "+b$
Aendere_String(@text$)
Debug "b$ nachher: "+b$
Zuletzt geändert von ChristianK am 24.05.2007 13:13, insgesamt 1-mal geändert.
ChristianK for President
Ich glaube jetzt hab ich's (entsprechend den Informationen in diesem Thread im englischen Forum). Der Trick ist offenbar, dass man für die Übergabe von Strings by Reference keinen Zeiger auf eine Struktur als Parameter verwendet.
Gruß, Little John
Code: Alles auswählen
;-- PB 4.02
EnableExplicit
Procedure Aendere_String (*str.s)
; mit *str.s wird die Adresse des String-Deskriptors an die Prozedur übergeben
*str + " Welt"
EndProcedure
Define text.s
text = "Hallo"
Aendere_String(@text)
Debug text