Seite 1 von 2
Wie exportiere ich eine Ressource?
Verfasst: 09.07.2010 22:54
von max_oldliner
Guten Abend alle zusammen,
ich habe gerade die Funktion unter Compiler --> Compiler Optionen --> Ressourcen gesehen das man jede X-belibige Datei in die *.exe Datei packen kann. Nun war die erste Frage die sich mir gestellt hat: "Wie ich eine solche Ressource wieder als normale Datei abspeichern kann?
Also wie ich sie exportieren kann.
Habe in der Hilfe leider nicht dazu entdeckt.
max_oldliner
Re: Wie exportiere ich eine Ressource?
Verfasst: 09.07.2010 23:12
von ts-soft
max_oldliner hat geschrieben:Habe in der Hilfe leider nicht dazu entdeckt.
max_oldliner
Ist ja auch API, wenn Du die Windows-Resourcen meinst.
Diese Routine bringt Dich auch den richtigen Weg. Also Resource finden: FindResource_(), Resource laden: LoadResource_(), größe ermitteln SizeOfResouce_() und Pointer finden: LockResource_().
Danach den Speicher nur noch auf Platte schreiben. Mit IncludeBinary hättest Du es bestimmt einfacher.
Gruß
Thomas
Re: Wie exportiere ich eine Ressource?
Verfasst: 09.07.2010 23:33
von max_oldliner
Vielen Dank ts-soft.
Mit den befehlen konnte ich sogar einen guten Thread im englischem Board finden:
http://www.purebasic.fr/english/viewtop ... 12&t=17950
Jetzt habe ich folgenden Code:
Code: Alles auswählen
ProcedureDLL SaveResourceAs(Name.s,File.s)
; (Use GetModuleHandle_ if you want to specify another file)
HandleResource= FindResource_(0,@Name,#RT_RCDATA)
If HandleResource
HandleGlobalMemoryBlock=LoadResource_(0,HandleResource)
PointerFirstByteOfTheResource=LockResource_(HandleGlobalMemoryBlock)
; Get size of the resource
Size= SizeofResource_(Handle,HandleResource)
; Save the file
FileId=OpenFile(#PB_Any,File)
If FileId
WriteData(FileID,HandleGlobalMemoryBlock,Size)
CloseFile(FileId)
EndIf
; Test if the file is written
If FileSize(File)=Size
ProcedureReturn 1
EndIf
EndIf
EndProcedure
SaveResourceAs("bild.jpg", "C:\test.jpg")
Ich habe die Datei bild.jpg eingebunden. Komisch ist nur das die *.exe Datei nur 50 kb groß ist obwohl das Bild 1,5 mb groß ist.
Ich habe keine Ahnung woran das liegt.
max_oldliner
Re: Wie exportiere ich eine Ressource?
Verfasst: 09.07.2010 23:37
von ts-soft
Ich hoffe, Du hast den Link in meinem Posting (Diese) nicht übersehen

Re: Wie exportiere ich eine Ressource?
Verfasst: 09.07.2010 23:38
von max_oldliner
Nein aber die andere Funktion fand ich einfacher.
Re: Wie exportiere ich eine Ressource?
Verfasst: 09.07.2010 23:40
von HeX0R
Wirklich einfach wäre, die von Thomas bereits erwähnte Funktion IncludeBinary.
Re: Wie exportiere ich eine Ressource?
Verfasst: 09.07.2010 23:41
von ts-soft
max_oldliner hat geschrieben:Nein aber die andere Funktion fand ich einfacher.
Das Ergebnis ist der Pointer und in *ResSize befindet sich die Größe, einfacher gehts nicht

Re: Wie exportiere ich eine Ressource?
Verfasst: 10.07.2010 00:38
von max_oldliner
Okay danke. Der Funktionsaufruf ist ja:
Code: Alles auswählen
GetResource(ResNr.l, ResName.s, ResType.l, hModule.l = 0, *ResSize.long = 0)
Der ResName wäre ja in meinem Fall "bild.jpg" aber was ist der Res Type?
Re: Wie exportiere ich eine Ressource?
Verfasst: 10.07.2010 00:44
von Kiffi
ts-soft hat geschrieben:Mit IncludeBinary hättest Du es bestimmt einfacher.
Grüße ... Kiffi
Re: Wie exportiere ich eine Ressource?
Verfasst: 10.07.2010 00:46
von max_oldliner
Code: Alles auswählen
If CreateFile(0,"C:\neuedatei.png")
WriteData(0, ?IncludeStart, ?IncludeEnd-?IncludeStart)
CloseFile(0)
EndIf
DataSection
IncludeStart:
IncludeBinary "C:\parsed.png"
IncludeEnd:
EndDataSection
Hab ihn gefunden. By Dark.