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!
Strukturierte Daten in Exe einbinden
Re: Strukturierte Daten in Exe einbinden
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 ...
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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Strukturierte Daten in Exe einbinden
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 ...
- 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
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.
Read-, Write- & Copy-Structure.
Re: Strukturierte Daten in Exe einbinden
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:
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!
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 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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Strukturierte Daten in Exe einbinden
Oki Leute,
erstmal vielen Dank für eure Empfehlungen. Werd mich das mal in Ruhe anschauen. Thanks to all!
erstmal vielen Dank für eure Empfehlungen. Werd mich das mal in Ruhe anschauen. Thanks to all!