Structure + Memory + WriteData

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
H.Brill
Beiträge: 497
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Structure + Memory + WriteData

Beitrag 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.
PB 6.10
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Structure + Memory + WriteData

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Structure + Memory + WriteData

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Structure + Memory + WriteData

Beitrag 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.
Benutzeravatar
H.Brill
Beiträge: 497
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Structure + Memory + WriteData

Beitrag 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.
PB 6.10
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Structure + Memory + WriteData

Beitrag von ts-soft »

Code: Alles auswählen

Structure MyStruct
  b1.b[200]
  b2.b[500]
  b3.b[700]
EndStructure
Meinste sowas?
Benutzeravatar
H.Brill
Beiträge: 497
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Structure + Memory + WriteData

Beitrag 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 ?
PB 6.10
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Structure + Memory + WriteData

Beitrag 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],.....) 
Benutzeravatar
H.Brill
Beiträge: 497
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Structure + Memory + WriteData

Beitrag 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.
PB 6.10
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Structure + Memory + WriteData

Beitrag 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)
Antworten