Strukturierte Daten in Exe einbinden

Anfängerfragen zum Programmieren mit PureBasic.
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Strukturierte Daten in Exe einbinden

Beitrag von CNESM »

Hallo,

ich möchte gerne die Daten einer gefüllte Structure in eine EXE nachträglich einbinden. Die Exe soll diese Daten dann nach dem Start auslesen und wieder in die Structure schreiben - das Verändern der EXE usw. ist kein Problem, nur tue ich mich mit dem Format, in dem ich die Daten in die Exe schreibe etwas schwer. Wie würdet ihr strukturierte Daten in eine Exe schreiben, um diese nachher wieder in die selbe Strucuture einzulesen und verwenden zu können?

Über hilfreiche Kommentar bin ich dankbar!
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Strukturierte Daten in Exe einbinden

Beitrag von STARGÅTE »

wenn du keine Strings (oder nur FixStrings) dinne hast kannst du ganz normal über CopyMemory() oder Read/Write-Data die ganze Structure ein/auslesen indem du als Länge : SizeOf(Structure) angibst und die Pointer der Variable ...

Ansonsten gibs hier im Forum n menge Thema zu Strings in Strukturen auflisten, und ich selber habe cih n bisschen was geschrieben ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Re: Strukturierte Daten in Exe einbinden

Beitrag von CNESM »

Nein FixStrings nutze ich nicht, ich habe im Grunde alles drinnen, nur keine FixStrings. Zudem kann die Structure kleiner aber auch riesig sein - everything is possible. Ich hab mal das Forum etwas durchstöbert, aber so auf den ersten Blick nichts gefunden, was sich leicht durchblicken lässt. Naja ich schau mal weiter. Jemand vielleicht schon ne Funktion hier aus dem Forum benutzt, was er empfehlen kann? Manche Funktionen scheinen mir sehr langsam zu sein ...
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Strukturierte Daten in Exe einbinden

Beitrag von NicTheQuick »

Ich hab mal was geschrieben um Strukturen in Dateien zu schreiben und wieder lesen zu können. Allerdings ist der Code schon etwas älter und berücksichtigt noch nicht alle neu hinzugekommenen Datentypen. Vielleicht hilft dir das zumindest ein bisschen.
Read-, Write- & Copy-Structure.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Strukturierte Daten in Exe einbinden

Beitrag von STARGÅTE »

Ich habe auch noch ein "nicht offiziell" veröffendliches Include:
Structure.pbi
(Link aktuallisiert 9.7.2010)

Dort gibt es für Memory : PokeT() und PeekT()
und für Files: WriteStructure() und ReadStructure()
Außerdem noch ein WriteArray() und ReadArray() welche aber nicht ganz fertig sind!

Die Funktionen geben dabei alle genau zurück wie viele Bytes tatsächlich geschrieben/gelesen werden

Das ganze läuft in der "Benutzung" dann so:
Wenn du eine Struktur hast, welche du in den obene genannten Funktionen benutzen willst, musst du diese Struktur erst "vorbereiten": mit AddStructureData(StructureName, Flag) (StructureName komplett klein schreiben!) (Flag gibt an ob String enthalten sind oder nicht)

Danach kannst du die Funktionen benutzen, hier ein Beispiel:

Code: Alles auswählen

Structure SubComplex
  Byte.b
  String.s
  Long.l
EndStructure
Structure Complex
  Long.l
  StaticString.s{3}
  Double.d
  StringArray.SubComplex[4]
  Word.w
EndStructure
AddStructureData(complex)
AddStructureData(subcomplex)



; StrukturAufbau auslesen, ist aber nicht notwendig:
Output$ = GetStructureData(Complex)
Debug "StrukturAufbau (komplex) : "+Output$
Output$ = GetStructureData(SubComplex)
Debug "StrukturAufbau (subkomplex) : "+Output$

Debug "----------------"

; StrukturGröße auslesen, wie sie im Speicher ist (String hat also Pointer-Länge):
Debug "StrukturSize (komplex) : "+Str(SizeOf(Complex))
Debug "StrukturSize (subkomplex) : "+Str(SizeOf(SubComplex))

Debug "----------------"




Source.Complex
Destination.Complex

Source\StaticString = "ABC"
Source\Double = #PI
Source\StringArray[2]\Long = 255
Source\StringArray[1]\String = "Dies ist ein Test"

Debug "----------------"
Debug "WriteStructure und ReadStructure"
Debug "----------------"
CreateFile(0, "Test.txt")
  Length = WriteStructure(0, Source, Complex)
CloseFile(0)
Debug "Write_BufferLänge: "+Str(Length)
ReadFile(0, "Test.txt")
  Length = ReadStructure(0, Destination, Complex)
CloseFile(0)
Debug "Read_BufferLänge: "+Str(Length)
Debug "Inhalt:"
Debug Destination\StaticString
Debug Destination\Double
Debug Destination\StringArray[2]\Long
Debug Destination\StringArray[1]\String




Dim SourceArray.SubComplex(1,4,9)
Dim DestinationArray.SubComplex(1,4,9)
SourceArray(0,0,0)\String = "0,0,0"
SourceArray(1,4,9)\String = "1,4,9"

Debug "----------------"
Debug "WriteArray und ReadArray"
Debug "----------------"
CreateFile(0, "Test.txt")
  Length = WriteArray(0, SourceArray(), SubComplex)
CloseFile(0)
Debug "Write_BufferLänge: "+Str(Length)
ReadFile(0, "Test.txt")
  Length = ReadArray(0, DestinationArray(), SubComplex)
CloseFile(0)
Debug "Read_BufferLänge: "+Str(Length)
Debug "Inhalt:"
Debug DestinationArray(0,0,0)\String 
Debug DestinationArray(1,4,9)\String 
Aber wie gesagt, benutzung auf eigene Gefahr, sie ist zwar auch bei mir in Benutzung, und auch schnell, da mehrere Long oder andere Daten erst geschrieben/gelesen werden wenn ein String kommt, der "anders" behandelt werden muss,
aber vllt gibts Bugs in zusammenhang mit 64Bit oder UNICode ...
wenn ja bitte melden!
Zuletzt geändert von STARGÅTE am 09.07.2010 15:58, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Re: Strukturierte Daten in Exe einbinden

Beitrag von CNESM »

Oki Leute,

erstmal vielen Dank für eure Empfehlungen. Werd mich das mal in Ruhe anschauen. Thanks to all!
Antworten