Seite 2 von 3

Verfasst: 23.02.2007 16:49
von PMV
Is ja gut /:->
Immer auf die kleinen ...
Naja in dem Beispiel oben isses wirklich nicht so tragisch ...
Und wenn ihr wirklich recht habt (wovon man wohl ausgehen muss :lol:),
ist es gut zu wissen. Sollte nur in dem Fall mal in die Hilfe explizit
erwähnt werden. *andre pn schreib* :D

@#Null ... ja an Macros hab ich auch schon gedacht, werd ich für
kompliziertere Projekte dann vermutlich auch nutzen müssen.

Ach ja, noch danke für alle für die Info^^

MFG PMV

Verfasst: 23.02.2007 17:08
von PMV
Und Pointer dürfen in StructureUnion auch nicht genutzt werden?

Code: Alles auswählen

Structure PMV_PreferenceLine
  Typ.b    ;0 = Group ;1 = Key + Value ; 2 = Commend
  Name.s   
  StructureUnion
    Value.s  
    *NextGroup
  EndStructureUnion
EndStructure
gibt wieder fehler in ClearList() aus -.-

Code: Alles auswählen

Structure PMV_PreferenceLine
  Typ.b    ;0 = Group ;1 = Key + Value ; 2 = Commend
  Name.s   
  StructureUnion
    Value.s  
    NextGroup.l
  EndStructureUnion
EndStructure
klappt^^

... ich mach auch wieder nen kleines beispiel. Bin dranne. Es sei denn
einer von euch bestätigt, das Pointer auch verboten sind -.-

MFG PMV

Verfasst: 23.02.2007 17:32
von DrShrek
Bitte kompletten Code.

Verfasst: 23.02.2007 17:40
von ts-soft
Structure Union macht doch im Endeffekt nichts anderes, als den Pointer zur
übergebenen Variable zu speichern. (also lediglich die Konvertierung zum
Pointer, wenn nötig). Je nach abruf wandelt er den Pointer wieder in den
Wert. (nicht Wissen, aber logische Spekulation :mrgreen: )

Pointer würden keinen Sinn machen.

Verfasst: 23.02.2007 17:51
von ts-soft
Fällt mir gerade ein, Fixstrings sind ein anderer Datentyp

Code: Alles auswählen

;ab PB 4.0 (PB4.01 hab ich net ;-) )
Structure Struc
  StructureUnion
    String1.s
    String2.s{255}
  EndStructureUnion
EndStructure
Global NewList List.Struc()

Procedure Add(String.s)
   AddElement(List())
   List()\String1 = String
EndProcedure
Add("Key")
ClearList(List()) ;-No ERROR!!!

Verfasst: 23.02.2007 17:52
von PMV
bin doch dabei :D

Code: Alles auswählen

Structure Struc
  StructureUnion
    Value.s  ;mit einem anderen Datentyp kein problem
    *Pointer
  EndStructureUnion
EndStructure
Global NewList List.Struc()

Structure Struc2
  *Pointer
EndStructure
Global Variable.Struc2

For i = 0 To 1 ;muss mindestens 2 mal durchlaufen werden
  AddElement(List()) ;es müssen min. 2 Elemente erstellt werden
  AddElement(List())
  Variable\Pointer = @List() ;mit einfacher Pointervariable kein problem o_O
  PreviousElement(List()) ;es muss mindestens 2 Felder zurück gehen O_o
  PreviousElement(List()) ;FirstElement(List()) bringt auch ein IMA
  List()\Pointer = Variable\Pointer
  ChangeCurrentElement(List(), Variable\Pointer)
Next
ClearList(List()) ;-Error
Aber moment, ts-soft hat doch recht ... klar -.-
der String ist ja nix anderes als ein Pointer, setzte ich nun den Wert
des Pointer-Strukturfeldes, verbieg ich gleichzeitig den Pointer für den
String. Somit versucht ClearList() nun speicher frei zu geben, der
garnicht zum programm gehört. Danke ts ... *gegenwandlauf*

Also, keine Pointer mit Strings in StructureUnion ...

Fixed Strings ... ne ... da hat PB4 mir auch mal probleme gemacht.
Bevor ich die wieder nutze, werd ich erst schauen, ob der damalige Code
immer noch ein "Error" auswirft und wenn ja, mich damit mal genauer
beschäftigen. Aber mal davon abgesehen wäre das zu viel
Speicherverschwendung, trotzdem danke :D

Edit: muss mich korrigieren :? ... das Beispiel funktioniert auch mit
Long-Variable anstelle des Pointers nicht :cry:

MFG PMV

Verfasst: 23.02.2007 19:02
von DrShrek
PMV hat geschrieben:Edit: muss mich korrigieren :? ... das Beispiel funktioniert auch mit
Long-Variable anstelle des Pointers nicht :cry:
MFG PMV
HAst Du schon mal daran gedacht...dass Du an anderere Stelle einen Fehler drinnen hast?

Tausche mal

Code: Alles auswählen

 List()\Pointer = Variable\Pointer 
mit

Code: Alles auswählen

 List()\Pointer = @List()

Verfasst: 23.02.2007 20:42
von PMV
ne, hab ich nicht ... ich mach doch keiner fehler :? ... /:->
Natürlich hab ich drann gedacht :D, aber das Beispiel oben ist die
gekürzte Version meines Codes im Projekt ... nur mit anderen
Bezeichnungen.

Ein List()\Pointer = @List() ergibt keinen sinn, warum sollte ich den Zeiger
des aktuellen Elements in sich selber speichern wollen? Denn kann ich
doch dann auch mit @ aufrufen wenn das Element eh schon aktiv ist.
Ne, es soll dort der Zeiger zu einem anderen Element gespeichert werden.

MFG PMV

Verfasst: 23.02.2007 21:41
von DrShrek
Versuch doch mal das hier...vieleicht verstehst Du es dann besser.

Code: Alles auswählen

Structure Struc 
  StructureUnion 
    Value.s  ;mit einem anderen Datentyp kein problem 
    *Pointer 
  EndStructureUnion 
EndStructure 
Global NewList List.Struc() 

Structure Struc2 
  *Pointer 
EndStructure 
Global Variable.Struc2 

For i = 0 To 1 ;muss mindestens 2 mal durchlaufen werden 
  AddElement(List()) ;es müssen min. 2 Elemente erstellt werden 
  AddElement(List()) 
  Debug "Zeigeradresse: " + Str(@List()) 
  Variable\Pointer = @List() ;mit einfacher Pointervariable kein problem o_O 
;   PreviousElement(List()) ;es muss mindestens 2 Felder zurück gehen O_o 
;   PreviousElement(List()) ;FirstElement(List()) bringt auch ein IMA 
  Debug "Zeigeradresse: " + Str(Variable\Pointer) 
  List()\Pointer = Variable\Pointer 
  ChangeCurrentElement(List(), Variable\Pointer) 
  Debug "" 
Next

ClearList(List())

Verfasst: 23.02.2007 21:46
von PMV
Das ist der Code, den ich dir grad per PN geschickt hatte ... mit
auskommentieren PreviousElement(). Aber ich versteh nicht, was du mir
sagen willst. Sorry :oops:
Die Debug-Werte sind immer noch ok?

MFG PMV