Seite 1 von 2
2048 byte long ASCII block an eine EXE Datei hängen
Verfasst: 01.12.2006 13:29
von funk.munich
Hallo zusammen,
ist es möglich eine 2048 byte long ASCII block an eine exe Datei anzuhängen und diese später beim Aufruf der exe Datei einzulesen?
Danke im vorraus,
Daniel
Re: 2048 byte long ASCII block an eine EXE Datei hängen
Verfasst: 01.12.2006 13:36
von Kiffi
> ist es möglich eine 2048 byte long ASCII block an eine exe Datei
> anzuhängen
ja, das geht mit IncludeBinary()
Code: Alles auswählen
DataSection
ASCIIBlock:
IncludeBinary "DeinAsciiBlock"
Data.b 0
EndDataSection
> und diese später beim Aufruf der exe Datei einzulesen?
... mit PeekS(?ASCIIBlock)
Grüße ... Kiffi
Verfasst: 01.12.2006 13:54
von AND51
Da gibt es doch auch noch
Read und
Data. Wäre das nicht auch was?
@ Kiffi: darf man denn Bindestriche in Labelnamen verwenden? Nee, oder? Das wäre mir neu...

Verfasst: 01.12.2006 13:58
von Kiffi
> @ Kiffi: darf man denn Bindestriche in Labelnamen verwenden? Nee, oder?
danke für den Hinweis. Wenn man den Code aus dem Gedächtnis hier
reintippert, kann das schon mal vorkommen. Hab's oben korrigiert.
Grüße ... Kiffi
Verfasst: 01.12.2006 14:09
von AND51
Kein Problem. Nur noch mal zur Erinnerung (für alle, auch mich

):
Variablennamen dürfen nur
A-Z,
a-z,
0-9 und
_ enthalten.
Für
Proceduren-,
Macro,
Label-,
Konstanten-,
Parameter-,
LinkedList-,
Array-,
Structure- und
Pointernamen und
Interfaces (was immer das auch ist) gilt dasselbe wie für Variablennamen. Habe ich noch einen Typ vergessen? Ich glaube nicht
@ Kiffi: Verwende doch lieber einen _Unterstrich_, das sieht dann wieder übersichtlicher aus!!

Verfasst: 01.12.2006 15:04
von funk.munich
Hi Ihr beiden,
danke für die schnellen Antworten
Also folgender Ablauf:
- PB Datei mit DataSection erstellen/kompilieren
"Data.b 0" hier müsste ich dann z.B. "Data.b 2048" schreiben?
- über ein separates programm einen ASCII block an die kompilierte
Datei hängen/schreiben
- Aufruf der kompilierten Datei und mit PeekS den Block einlesen
Sind die Schritte korrekt? Oder ist da noch etwas falsch?
Danke + Gruß,
Daniel
Verfasst: 01.12.2006 16:13
von #NULL
das 0-byte wird als string-ende interpretiert und für PeekS(..) benötigt [siehe hilfe zu PeekS()]
Code: Alles auswählen
hWin=OpenWindow(0, 50,50,400,200, "")
CreateGadgetList(hWin)
EditorGadget(0, 0,0, 400,200)
SetGadgetText(0, PeekS(?ASCIIBlock) )
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow
DataSection
ASCIIBlock:
IncludeBinary "C:\test\test.txt"
Data.b 0
EndDataSection
Verfasst: 01.12.2006 16:41
von ts-soft
>> 2048 byte long ASCII block an eine EXE Datei hängen
Code: Alles auswählen
#ExeFile = "test.exe"; hier solls angehängt werden
#DataFile = "data.dat"; hier befinden sich die 2048 byte
If OpenFile(0, #ExeFile)
FileSeek(Lof(0))
If ReadFile(1, #DataFile)
Mem = AllocateMemory(2048)
If Mem
ReadData(1, Mem)
WriteData(0, Mem, 2048)
FreeMemory(Mem)
EndIf
CloseFile(1)
EndIf
CloseFile(0)
EndIf
Zum auslesen die eigene Exe lesend öffnen, fileseek ans ende minus 2048
und lesen
Gruß
Thomas
Verfasst: 01.12.2006 17:54
von funk.munich
Hi Thomas,
das funxt irgendwie nicht
Bekomme nur kryptische Dinge angezeigt.
Code: Alles auswählen
file$ = "seek01.exe"
If ReadFile(0,file$)
length = Lof()
FileSeek(length - 2048)
*MemoryID = AllocateMemory(2048)
If *MemoryID
bytes = ReadData(*MemoryID, 2048)
MessageRequester("", PeekS(*MemoryID))
EndIf
CloseFile(0)
EndIf
BTW, nicht wundern, dass es PB3.9x ist. Will ich nutzen, da ich dann den
Code auch unter Linux sowie Mac nutzen kann. 3.9 existiert ja für alle 3 platformen.
Danke + Gruß,
Daniel
Verfasst: 01.12.2006 18:27
von ts-soft
Beim erstellen am besten ans Ende der Datei noch die genause länge als Long schreiben.
Beim Lesen, ans Ende -4, dort die länge als long einlesen und dann mit fileseek lof - 4 - laenge.
Sollte klappen, ging bisher immer
