Seite 1 von 3

Structure + Memory + WriteData

Verfasst: 14.02.2010 16:38
von H.Brill
Hallo,
Kann man Memory-Bereiche (mit AllocateMemory)
auch in Structuren unterbringen ?
Ich habe 3 unterschiedliche große Bereiche, die ich gerne
in eine Structure reinschreiben und dann mit WriteData()
mit einem Rutsch in eine Datei schreiben und später auch
mit ReadData ()wieder lesen will.

Geht sicher auch mit FileSeek() zu Fuß, möchte das aber
gerne umgehen.

Re: Structure + Memory + WriteData

Verfasst: 14.02.2010 16:43
von ts-soft
Entweder den Memory gleich beim erstellen strukturieren:
*memory.mystructure = AllocateMemory...

oder in der Hilfe mal unter CopyMemory nachsehen.

Bei Strukturen mit Strings (nicht Fixstrings) wird das aber nicht funktionieren!

Gruß
Thomas

Re: Structure + Memory + WriteData

Verfasst: 14.02.2010 16:44
von Kaeru Gaman
in der Struktur selber könntest du mit einem Array von Longs einen dementsprechend großen Abschnitt einplanen.

Code: Alles auswählen

Structure RecSet
  Num.l
  XPos.l
  YPos.l
  Dat.l[512]  ; 2MB pro Element
EndStructure
zugriff darauf erhältst du mit pointer auf das Element und OffSetOf...

Re: Structure + Memory + WriteData

Verfasst: 14.02.2010 16:45
von ts-soft
H.Brill hat geschrieben:Hallo,
Kann man Memory-Bereiche (mit AllocateMemory)
auch in Structuren unterbringen ?
Vielleicht hab ich das auch jetzt verkehrt verstanden.
Strukturierte Variablen sind im Endeffekt nichts anders als Memory!
Lediglich bei Strings ist aufzupassen.

Re: Structure + Memory + WriteData

Verfasst: 14.02.2010 19:19
von H.Brill
Dachte, man könnte evtl. mit Define
vorher was definieren. Etwa so :

Code: Alles auswählen

Define.l bereich1 = AllocateMemory(200)
Define.l bereich2 = Allocatememory(500)
Define.l bereich3 = AllocateMemory(700)

Structure MyStruct
  b1.bereich1
  b2.bereich2
  b3.bereich3
EndStructure

; dann was reinschreiben, bzw. an eine
DLL-Funktion übergeben.

PokeL(*MyStruct\b1, wert)
bzw.
DllFunction(*MyStruct\b2,....) 
Dann halt mit WriteData(0, *MyStruct, SizeOf(*MyStruct))
in eine Datei schreiben.
Aber mit nem Array in der Structure könnte es auch gehen.

Re: Structure + Memory + WriteData

Verfasst: 14.02.2010 19:23
von ts-soft

Code: Alles auswählen

Structure MyStruct
  b1.b[200]
  b2.b[500]
  b3.b[700]
EndStructure
Meinste sowas?

Re: Structure + Memory + WriteData

Verfasst: 14.02.2010 19:59
von H.Brill
Danke ts-soft,
werde es mal damit versuchen.
Normalerweise füttere ich eine Fremd-Dll
mit Bereichen (AllocateMemory), die mir
dann diese Bereiche füllt bzw. diese Bereiche
für ihre Zwecke ausliest.
Mal sehen, ob ich ihr das unterjubeln kann.

Übergabe müßte dann so sein :

Code: Alles auswählen

ergebnis = DllFunction(*MyStruct\b1,.....) 
oder liege ich da falsch ?

Re: Structure + Memory + WriteData

Verfasst: 14.02.2010 20:06
von ts-soft
Mit Pointern mußte ja den Speicher selbst allokieren, lieber so:

Code: Alles auswählen

Structure  MyStruct
  b1.b[200]
  b2.b[500]
  b3.b[700]
EndStructure

Define.MyStruct a
ergebnis = DllFunction(@a\b1,.....) 
; oder
ergebnis = DllFunction(@a\b1[0],.....) 

Re: Structure + Memory + WriteData

Verfasst: 14.02.2010 20:23
von H.Brill
Danke,
muß mich noch durchwursteln.
Habe EnableExplicit an, der meckert
noch rum. (an beiden deiner Varianten).

Aber den Ansatz hab ich ja jetzt.

Re: Structure + Memory + WriteData

Verfasst: 14.02.2010 20:37
von ts-soft
An meinem Code kann das gemeckere nicht liegen. Den Fehler mußte bei Dir suchen <)

Code: Alles auswählen

EnableExplicit
Structure  MyStruct
  b1.b[200]
  b2.b[500]
  b3.b[700]
EndStructure

Define.MyStruct a

a\b3[0] = 'A'
Debug PeekS(@a\b3[0], 1, #PB_Ascii)