Seite 1 von 1
Text und Binaryfile aus Resource in Variable einlesen (PB4)
Verfasst: 27.11.2006 21:48
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
Verfasst: 27.11.2006 21:59
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
Verfasst: 27.11.2006 21:59
von ts-soft
Als String oder als RC_DATA ?
Verfasst: 27.11.2006 22:05
von BigJack
Das Textfile als String, das Binaryfile vermutlich als RCData...
Verfasst: 27.11.2006 22:26
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

, 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
Verfasst: 29.11.2006 17:54
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
Verfasst: 29.11.2006 19:30
von ts-soft
Naja, wenn Du meine UDRes lib nimmst, haste es einfacher. Dort heißt der Typ PBDATA
