Undokumentierte Features von PB
- hardfalcon
- Beiträge: 3447
- Registriert: 29.08.2004 20:46
Wunderbar, dann sind sich ja jetzt eigentlich alle einig?
Macht nix, bis morgen fällt mir bestimmt ein neues Streitthema ein...

Macht nix, bis morgen fällt mir bestimmt ein neues Streitthema ein...
Was soll das denn? GPI sagt doch schon seit Ewigkeiten, dass man sowas nachschlagen soll. Plötzlich stimmst du ihm zu, aber nicht so, dass ers gleich merken kann, und regst dich dann dauf, wenn er sich wiederholt...Glaubst du, jeder Entwickler hat auf seinem PC ein dutzend Windows-Versionen installiert?!

Windows XP Pro SP2 - PB 4.00Ich bin Ausländer - fast überall
- hardfalcon
- Beiträge: 3447
- Registriert: 29.08.2004 20:46
Ich reg mich doch nicht auf... Ausserdem war (bisher) KEIN EINZIGES meiner Postings in irgendeiner Weise "bösartig" gemeint. Aber wenn irgendjemand das hier so interpretiert haben sollte:
Vertragen wir uns wieder, GPI!
So, jetzt dürfte hier hoffentlich wieder "FriedeFreudeEierkuchen" herrschen...
cya
Pascal
Vertragen wir uns wieder, GPI!


So, jetzt dürfte hier hoffentlich wieder "FriedeFreudeEierkuchen" herrschen...

cya
Pascal
- remi_meier
- Beiträge: 1078
- Registriert: 29.08.2004 20:11
- Wohnort: Schweiz
Das hätt ich fast vergessen:
- 'a' liefert ASCII-Code
Anstatt mit Asc("c") kann man auch ganz einfach 'c' verwenden.
Bsp:
String.s = "hallo"
*p.BYTE = @String
While *p\b
If *p\b = 'l'
Debug Chr(*p\b)
EndIf
*p + 1
Wend
Man kann bis zu 4 Zeichen (4 Bytes) innerhalb der '' schreiben (die 4 Bytes werden in umgekehrter Reihenfolge gespeichert).
Bsp:
a.l = 'abcd'
For z = 0 To 3
Debug Chr(PeekB(@a + z))
Next
ebenfalls nicht dokumentiert:
Wird Str() auf einen String angewendet, so liefert die Funktion den Zeiger der
Variable zurück.
Grüße ... Kiffi
Wird Str() auf einen String angewendet, so liefert die Funktion den Zeiger der
Variable zurück.
Code: Alles auswählen
sDummy.s = "Hallo"
Debug Str(sDummy)
Debug @sDummy
a²+b²=mc²
- Froggerprogger
- Badmin
- Beiträge: 855
- Registriert: 08.09.2004 20:02
Nochmal eine Zusammenfassung bzgl. Array (Size/Typ/Procedureparameter incl. OutOfBounds-Debuggen)
Alternativ kann man auch (um ein neudimensionieren bei jedem Prozeduraufruf zu sparen), natürlich irgendwo anders oberhalb und außerhalb der Prozedur einfach ein
setzen, da Arrays sowieso immer global sind.
Code: Alles auswählen
;- Array-Size
Dim A.l(9)
Dim B.l(9,9)
Dim C.l(9,9,9)
Debug "ARRAY-SIZE"
Debug "Size (9) : " + Str(PeekL(@A()-8))
Debug "Size (9,9) : " + Str(PeekL(@B()-8))
Debug "Size (9,9,9) : " + Str(PeekL(@C()-8))
Debug ""
;- Array-Type
Dim ArrayB.b(0)
Dim ArrayW.w(0)
Dim ArrayL.l(0)
Dim ArrayF.f(0)
Dim ArrayS.s(0)
Dim ArrayPOINT.POINT(0)
Dim ArrayLONG.LONG(0)
Debug "ARRAY-TYPE"
Debug "Byte: " + Str(PeekL(@ArrayB()-4))
Debug "Word: " + Str(PeekL(@ArrayW()-4))
Debug "Long: " + Str(PeekL(@ArrayL()-4))
Debug "Float: " + Str(PeekL(@ArrayF()-4))
Debug "String: " + Str(PeekL(@ArrayS()-4))
Debug "Structure: " + Str(PeekL(@ArrayPOINT()-4))
Debug "Structure: " + Str(PeekL(@ArrayLONG()-4))
;/ the values of the types:
#Array_Type_Byte = 1
#Array_Type_Word = 3
#Array_Type_Long = 5
#Array_Type_Float = 9
#Array_Type_String = 8
#Array_Type_Structure = 7
;- Array as Procedure-Parameter (of fixed type, but changeable size)
Procedure TestProc(*arr.l)
Dim LocalArray.l(0) ; dimensionate it to 0
FreeMemory(@LocalArray()-16) ; free it (these few bytes ;-) )
LocalArray() = *arr ; let it point to the overgiven array
Debug LocalArray(12) ; play with it (OutOfBounds is caught by the debugger!)
EndProcedure
Dim MyArray.l(20)
MyArray(12) = 777
TestProc(@MyArray())
MyArray(12) = 888
TestProc(@MyArray())
Code: Alles auswählen
Dim LocalArray.l(0)
FreeMemory(@LocalArray()-16) ; optional
Zuletzt geändert von Froggerprogger am 17.02.2005 17:05, insgesamt 3-mal geändert.
!UD2
Soweit ich weiß, wird es für einige Libs so benötigt.Kiffi hat geschrieben:> Ach, das ist absicht o_O?
keine Ahnung. Es ist aber undokumentiert
Grüße ... Kiffi
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Ist doch logisch das Str() auf einen String den Pointer zurückgibt, schließlich wird, wenn man einen String an eine Proc übergibt nicht der String in den Stack (bzw. Eax-Register) geladen sondern der Pointer. Ist also genau das selbe wie Str(@string.s). Und dass das den Pointer zurückgibt dürfte jedem klar sein, der Pointer ist ja auch nur ein long wie jede andere Zahl auch.
Desswegen kann es auch kein Schönheitsfehler der Proc sein. Diese kann ja schlecht unterscheiden ob eine Zahl eine Zahl sein soll oder ein Pointer, man könnte höchstens verhindern das man Strings anstelle von longs angeben kann, aber das funktioniert ja bei jeder anderen Proc auch.
Desswegen kann es auch kein Schönheitsfehler der Proc sein. Diese kann ja schlecht unterscheiden ob eine Zahl eine Zahl sein soll oder ein Pointer, man könnte höchstens verhindern das man Strings anstelle von longs angeben kann, aber das funktioniert ja bei jeder anderen Proc auch.

[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]