
lediglich "bless" kann er nicht starten

PS: Als 64-Bit User solltest zumindest Du Dir das Procedure.l abgewöhnen, entweder .i oder weglassen.
Gruß
Thomas
Ok, Beispiele gehen jetzt für Windows und Linux, solange 'bless' installiert ist.ts-soft hat geschrieben:lediglich "bless" kann er nicht starten![]()
PS: Als 64-Bit User solltest zumindest Du Dir das Procedure.l abgewöhnen, entweder .i oder weglassen.
Code: Alles auswählen
; Zum Speichern und Laden von Listen
Structure sty_AllTypes ;NicTheQuic
StructureUnion ;hierdurch beginnen alle Variablen
b.b ;an derselben Speicheradresse
w.w
l.l
f.f
*s.s ;Hier bringt jetzt PB510 Fehler "Native Types can't be used with pointers"
c.c
q.q
d.d
EndStructureUnion
EndStructure
Code: Alles auswählen
Procedure sy_WriteStructure(*Var.sty_AllTypes, *SFTD.Byte, l_FileID)
; *Var.sty_AllTypes =Ptr auf akt. Listen-Element
; *SFTD.Byte = Structure Field Type Definition, z.B. "bsslllw"
Protected length.l
; Durchlauf durch Struktur-Feld-Typ-Definition
; Pro Feld gehts einmal in die Schleife
While *SFTD\b
; je nach Feldtyp
; a) Auswahl des korrekten Speicher-Befehls und
; b) Weiterrücken des Pointers je nach Speicherbedarf des Feldtyps
Select *SFTD\b
Case 'b' ; Typ = Byte
; schreibe Byte; hole Inhalt aus Speicherbereich
WriteByte (l_FileID, *Var\b) : *Var + 1 ; setze Pointer um 1 weiter
Case 'w' : WriteWord (l_FileID, *Var\w) : *Var + 2
Case 'l' : WriteLong (l_FileID, *Var\l) : *Var + 4
Case 'f' : WriteFloat(l_FileID, *Var\f) : *Var + 4
Case 's':
;/ Typ = String
; Länge ermitteln, da aktueller Inhalt von SFTD = s ist,
; muss es ein String sein
length = Len(*Var\s) ; --> Hier kommt der Fehler bei PB510 Beta 5: "Falscher Parameter-Typ: ein String wird erwartet"
; Länge des Strings schreiben, auch wenn = 0
WriteLong(l_FileID, length)
; Nur wenn Länge > 0, d.h. String nicht leer schreiben
; "@*Var\s" --> genial: Inhalt des Speicherbereiches,
; auf den der Pointer *Var\s zeigt.
If length : WriteData(l_FileID, @*Var\s, length) : EndIf
*Var + 4
EndSelect
; Den Zeiger auf SFTD eins weiterrücken
; SFTD hat Typ BYTE, d.h es besteht aus Byte-Elementen, diese verbrauchen
; 1 Byte, damit erwischt + 1 das nächste Zeichen
*SFTD + 1
Wend
;a + 1
EndProcedure
Code: Alles auswählen
Global Dim SFTD.s(20)
SFTD(1) = "bsslllw"
ForEach li_Element()
sy_WriteStructure(@li_Element(), @SFTD(1), #File)
Next
Code: Alles auswählen
Structure sty_AllTypes ;NicTheQuic
StructureUnion ;hierdurch beginnen alle Variablen
b.b ;an derselben Speicheradresse
w.w
l.l
f.f
*s.String
q.q
d.d
EndStructureUnion
EndStructure
Code: Alles auswählen
Procedure sy_WriteStructure(*Var.sty_AllTypes, *SFTD.Byte, l_FileID)
; *Var.sty_AllTypes =Ptr auf akt. Listen-Element
; *SFTD.Byte = Structure Field Type Definition, z.B. "bsslllw"
Protected length.l
; Durchlauf durch Struktur-Feld-Typ-Definition
; Pro Feld gehts einmal in die Schleife
While *SFTD\b
; je nach Feldtyp
; a) Auswahl des korrekten Speicher-Befehls und
; b) Weiterrücken des Pointers je nach Speicherbedarf des Feldtyps
Select *SFTD\b
Case 'b' ; Typ = Byte
; schreibe Byte; hole Inhalt aus Speicherbereich
WriteByte (l_FileID, *Var\b) : *Var + 1 ; setze Pointer um 1 weiter
Case 'w' : WriteWord (l_FileID, *Var\w) : *Var + 2
Case 'l' : WriteLong (l_FileID, *Var\l) : *Var + 4
Case 'f' : WriteFloat(l_FileID, *Var\f) : *Var + 4
Case 's':
;/ Typ = String
; Länge ermitteln, da aktueller Inhalt von SFTD = s ist,
; muss es ein String sein
length = Len(*Var\s\s) ; --> Hier kommt der Fehler bei PB510 Beta 5: "Falscher Parameter-Typ: ein String wird erwartet"
; Länge des Strings schreiben, auch wenn = 0
WriteLong(l_FileID, length)
; Nur wenn Länge > 0, d.h. String nicht leer schreiben
; "@*Var\s" --> genial: Inhalt des Speicherbereiches,
; auf den der Pointer *Var\s zeigt.
If length : WriteData(l_FileID, @*Var\s, length) : EndIf
*Var + 4
EndSelect
; Den Zeiger auf SFTD eins weiterrücken
; SFTD hat Typ BYTE, d.h es besteht aus Byte-Elementen, diese verbrauchen
; 1 Byte, damit erwischt + 1 das nächste Zeichen
*SFTD + 1
Wend
;a + 1
EndProcedure