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 :
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)