Text und Binaryfile aus Resource in Variable einlesen (PB4)

Anfängerfragen zum Programmieren mit PureBasic.
BigJack
Beiträge: 5
Registriert: 16.05.2006 17:28

Text und Binaryfile aus Resource in Variable einlesen (PB4)

Beitrag von BigJack »

Hallo zusammen,

vielleicht kann mir jemand helfen dieses Problem zu lösen:
Ich habe in meiner Exe ein Textfile und ein Binary-File als Resource eingefügt. Soweit so gut. Wie kann ich auf diese später zugreifen - sprich in eine Variable einelesen (Textfile) bzw. das Binary file auslesen und speichern?

Gruß BigJack
Benutzeravatar
BI2
Beiträge: 145
Registriert: 26.11.2006 19:07

Beitrag von BI2 »

Hallo BigJack,

für Dein Binary Problem könnte das hier die Lösung sein:

Code: Alles auswählen

If CreateFile(0, "NeueBinary.exe")
	WriteData(0, ?DateiStart, ?DateiEnde - ?DateiStart)
	CloseFile(0)
EndIf


DataSection
  DateiStart:
    IncludeBinary "Binary.exe"
  DateiEnde:
EndDataSection    
mit dem Text in die Variable einlesen sollte eigentlich mit ReadData() funktionieren.

Viele Grüße
PB 5.7x (x64), LinuxMint 18.3 - Xfce (x64)

Einsteigerbuch: PureBasic - Eine Einführung in die Computer Programmierung
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

Beitrag von ts-soft »

Als String oder als RC_DATA ?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
BigJack
Beiträge: 5
Registriert: 16.05.2006 17:28

Beitrag von BigJack »

Das Textfile als String, das Binaryfile vermutlich als RCData...
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

Beitrag von ts-soft »

Du solltest beides als RC_DATA nehmen, Stringresourcen sind mehr für Einzeiler gedacht.

Hier mal ein Beispielcode, konnte ich unter Linux aber nicht testen :mrgreen: , also auf eigene Gefahr.

Code: Alles auswählen

Procedure LoadResource(ResNumber.l, Hmodule.l = 0)
  Protected ResName.s
  Protected hFind.l, hLoad.l, hLock.l, hSize.l, Mem.l
  Protected ResType.s = "RC_DATA"

  ResName = "#" + Str(ResNumber)

  If Not Hmodule : Hmodule = GetModuleHandle_(#Null) : EndIf

  hFind = FindResource_(Hmodule, ResName, @ResType)
  If hFind
    hLoad = LoadResource_(Hmodule, hFind)
    hSize = SizeofResource_(Hmodule, hFind)
    hLock = LockResource_(hLoad)

    Mem = AllocateMemory(hSize)

    If Mem
      CopyMemory(hLock, Mem, hSize)
      FreeResource_(hLock)
      ProcedureReturn Mem
    EndIf
  EndIf
EndProcedure

*FilePointer = LoadResource(1); File wurde als RC_DATA mit der Nummer 1 im Resource Skript erzeugt

If *FilePointer
  If CreateFile(0, "test.exe")
    WriteData(0, *FilePointer, MemorySize(*FilePointer))
    CloseFile(0)
    FreeMemory(*FilePointer)
  EndIf
EndIf

*TextPointer = LoadResource(2)

If *TextPointer
  MyText.s = PeekS(*TextPointer)
  FreeMemory(*TextPointer)
EndIf
Wenn Du beim ResourceSkript keine Fehler machst, sollte es funktionieren!

Ansonsten nochmal Nachhaken
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
BigJack
Beiträge: 5
Registriert: 16.05.2006 17:28

Beitrag von BigJack »

Danke für eure Antworten,

TS-Soft: Super Code - funktioniert einwandfrei. Das war genau wonach ich gesucht hatte!!! :)

Einzige Einschränkung: Es funktionierte bei mir nicht mit "RC_DATA", dafür aber mit dem Wert "TEXT" oder "RDATA".
Also unter Umständen den Wert für "ResType.s" im Code ändern...

Gruß Mike
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

Beitrag von ts-soft »

Naja, wenn Du meine UDRes lib nimmst, haste es einfacher. Dort heißt der Typ PBDATA :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten