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

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!! :D

Verfasst: 01.12.2006 15:04
von funk.munich
Hi Ihr beiden,

danke für die schnellen Antworten :D

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

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