Seite 1 von 3

PBData und UDRes

Verfasst: 28.06.2006 05:07
von ts-soft
Dies ist eine PureBasic Library um Resourcen in gepackter (und optional
verschlüsselter) Form in die Exe zu packen. Im Gegensatz zu
IncludeBinary, geschieht dies nach Windows-Art, in speicherschonender
Form

Bei Benutzung der beigefügten Include-Datei wird automatisch ein
CRC-Check gemacht.
Desweiteren wird bei Benutzung eines Keys (Verschlüsselung), dieser
Anhand eines gespeicherten MD5 Fingerprint (der Key selber wird nicht
gespeichert) überprüft

Diese UserLibrary unterstützt zur Zeit weder Unicode, noch Threadsafe,
was aber auch nicht erforderlich ist, da die erstellten Resourcen (*.res)
mithilfe einer Include-Datei in allen Programmen (ASCII, Unicode oder
Threadsafe) genutzt werden können

Die UserLibrary ist nur zur Erstellung der PBDATA-Resourcen, welche
einfach Importiert werden können, erforderlich. Die Nutzung erfolgt
ausschließlich über die Include-Datei, wobei keine UserLibraries erforderlich sind.

Werden mehrere Exen oder DLLs verwendet, so genügt es die Resourcen
in einer davon zu packen, die anderen können diese mitbenutzen!

Dies ist Wohl die erste Userlib, die eine LinkList() als Parameter erwartet (keinen Pointer :wink: )

Beispiel zur Syntax der Erstellung:

Code: Alles auswählen

; Als erstes ein LinkList vom Typ String erstellen
NewList MeineDatas.s()

; Alle benötigten Resourcen hinzufügen
AddElement(MeineDatas())
MeineDatas() = #PB_Compiler_Home + "Examples\Sources\Data\PureBasicLogo.bmp"

AddElement(MeineDatas())
MeineDatas() = #PB_Compiler_Home + "Examples\Sources\Data\PureBasic.bmp"

; und zum Schluß das PBData Resource erstellen
If PBDataCreate("Test", MeineDatas(),"password")
  MessageRequester("PBData", "Test.res erfolgreich erstellt")
EndIf 
Sieht nicht nur einfach aus, es ist es auch.

Beispiel zur Nutzung:

Code: Alles auswählen

XIncludeFile "PBData_Include.pbi"

Import "Test.res" : EndImport

Enumeration 1
  #PBData_PureBasicLogo
  #PBData_PureBasic
EndEnumeration

ImgData = GetPBData(#PBData_PureBasicLogo, "password")

If ImgData > 0
  Image = CatchImage(#PB_Any, ImgData)
  FreeMemory(ImgData)
Else
  Select ImgData
    Case #PBDATA_Error_Unknown
      Debug "Unbekannter Fehler, Resource nicht gefunden oder zu wenig Speicher?"
    Case #PBDATA_Error_Encryption
      Debug "Key-Fehler, überprüfen Sie, ob das richtige Passwort eingegeben wurde!"
    Case #PBDATA_Error_CRC32
      Debug "CRC32-Fehler, korrupte Datei"
  EndSelect
  End
EndIf

If OpenWindow(0,0,0,381,68,"PBData Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(0))
    ImageGadget(1,0,0,381,68,ImageID(Image))
  EndIf
  Repeat
  Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf

Debug SavePBData("test.bmp", #PBData_PureBasic, "password")
Sollte interesse bestehen, werde ich noch eine GUI dafür basteln,
andernfalls, mir genügt es auch so :wink:

Download 66 KiBi

Re: PBData UserLib

Verfasst: 28.06.2006 07:29
von Kiffi
Ich hatte ja schon die Ehre, eine Vorabversion der Lib testen zu dürfen
und ich muss sagen, dass das ein schönes und nützliches Stückchen Code
ist. :allright:

Wieder mal ein weiteres Qualitätsprodukt aus dem Hause ts-soft :-)

> Sollte interesse bestehen, werde ich noch eine GUI dafür basteln,

na klar besteht Interesse!

> andernfalls, mir genügt es auch so Wink

nix da! An die Tastatur, Sklave! ;-)

Vielen Dank & Grüße ... Kiffi

Re: PBData UserLib

Verfasst: 28.06.2006 11:29
von ts-soft
Kiffi hat geschrieben: > Sollte interesse bestehen, werde ich noch eine GUI dafür basteln,

na klar besteht Interesse!
puh
Kiffi hat geschrieben: > andernfalls, mir genügt es auch so Wink

nix da! An die Tastatur, Sklave! ;-)
Okay Chef :mrgreen:

Bevor ich mir zuviel Arbeit mache habe ich mal aus meiner Sicht die Vor- und
Nachteile gegenüber ähnlichen Tools zusammengestellt.
Nachteil:
Es werden keine Dateinamen gespeichert, nur nummerischer Aufruf möglich.
Keine Unterstützung für anderes OS möglich.
Bei Änderung Neuerstellung erforderlich.

Vorteil:
Speicherschonende Integration in die Exe oder DLL durch dazulinken als Resource.
Sehr schmaler Header (long für TotalSize, long für CRC32 und 33 Bytes für Fingerprint).
Schnelles auffinden durch durch FindResource API.
Zur Zeit einziges Pack, welches mit Unicode und ThreadSafe klarkommt (nicht die Lib).
Bevor die GUI erstellt wird, werde ich erstmal eine gewisse Testphase
abwarten, das spart hinterher bestimmt Zeit
:wink:

Verfasst: 29.06.2006 09:42
von ts-soft
Update:

Schnellere RC4-Routine in Lib und Include ( :allright: Friedhelm)

Fehlerbeseitigung:
Hab leider nicht berücksichtigt, das der PureBasic-Packer manche Dateien,
insbesondere jpg und gif, nicht packen kann :oops:

Diese werden jetzt ungepackt hinzugefügt (Verschlüsselung erfolgt aber
korrekt). Angepaßt wurden die Lib und die Include-Datei. Bereits erstellte
Packs sollten weiterhin funktionieren.

Download siehe erster Beitrag

Gruß
Thomas

Verfasst: 01.07.2006 18:17
von ts-soft
PBData_Packer basiert auf der PBData Userlib. Zur Nutzung werden keine
weiteren Dateien, ausser PB4, benötigt

Bedienung ist recht einfach, man braucht nur die zu packenden Dateien
draufdroppen, auch Ordner, sowie mehrere Darteien/Ordner, sind möglich.
Unterordner werden ignoriert. Einzelne Einträge lassn sich per
Kontextmenü wieder entfernen.

Einstellungen treffen, Packrate, Schlüsselkey usw. und dann Pack and Save
drücken. Es wird eine Resourcendatei erstellt (*.res), sowie eine zu dieser
passende Includedatei. Von bereits vorhandenen gleichnamigen Dateien
wird ein Backup erstellt. Desweitern wird eine Packliste erstellt
(*.pbdata_lst) welche man später nur auf den Packer droppen braucht, um
dieselben Dateien in einem neuen Pack zu erfassen.

Im Ordner Examples findet ihr ein bekanntes Spiel, in einer hierfür
angepaßten Version ;)

Einschränkungen: Die einzelnen Dateien dürfen nicht grösser als 10 MB
sein! Der Packer bemerkt dies aber und gibt eine entsprechende Meldung
aus.

Die gepackten Dateien lassen sich sowohl in Dlls und Exen verwenden,
auch welche die Unicode oder Threadsafe kompiliert werden sollen.

Bild
Download des Packers

Feedback erwünscht, und vor allem viel Spaß damit für Kiffi
:wink:

Verfasst: 01.07.2006 19:46
von Frogger
Dein Tool sieht klasse aus und funktioniert ganz gut.
Mal ne Frage:
Die einzelnen Dateien dürfen nicht grösser als 10 MB sein!
Wieso? :?

Verfasst: 01.07.2006 19:57
von ts-soft
Frogger hat geschrieben:Dein Tool sieht klasse aus und funktioniert ganz gut.
Mal ne Frage:
Die einzelnen Dateien dürfen nicht grösser als 10 MB sein!
Wieso? :?
Bei bereits komprimierten Dateien, z.B. *.zip, erhalte ich vom PB-Packer ab
ca. 12 MB keine Fehlermeldung :freak: , ansonsten werden die Dateien
nämlich ungepackt, aber verschlüsselt, falls key, hinzugefügt.
Diese unbemerkten Fehler erzeugen fehlerhafte Resourcen, welche dann
auch von Polink bemängelt werden.

Bis ich eine bessere Lösung habe, habe ich diesen Kompromiss gewählt,
erstmal.

Freut mich, wenns ansonsten gut funktioniert

Verfasst: 02.07.2006 12:56
von ts-soft
Packer-Update:
Menupunkt zum deaktivieren des Sizelimits hinzugefügt. Die daraus
resultierenen *.res sollten aber getestet werden, vor allem wenn Dateien
des Typs *.zip, *.jpg, *.png und *.gif verwendet werden. Desweiteren sollte
man bedenken, auch der Windows-Speicher ist endlich. Die Lib selber sollte
bis 2 GB keine Probleme haben :wink:

Verfasst: 08.07.2006 08:40
von ts-soft
Komplett neue Version

Compiliert direkt zu *.res ohne Verwendung eines anderen
Resource-Compilers, ohne Verwendung eines Resource-Skripts oder
temporärer Dateien. Gepackt wird jetzt mit BriefLZ, welches in der Lib
integriert ist. Die neue Version heißt jetzt UDRes (Userdefined Resource) und
ist nicht kompatibel zur vorherigen Version, deshalb hier der Extra download:

Download

Verfasst: 08.07.2006 13:18
von H.Brill
Hallo,
ist ja genial. Hab mal grad die Hilfe dazu gelesen. Da könnte ich
mir ja einen kleinen Resourcen - Mananger bauen, da ja UDRes-Create(),
UDRes_Open() und UDResAddFile() schon dabei sind. Man hat ja
manchmal verschieden Resourcedateien für verschiedene Progs.

Meine Fragen nun :

Kannst du vielleicht (wenn machbar) was einbauen, womit man
Dateien in der Resource auch löschen kann ?
UDRes_DeleteFile(FileID, filename.s oder Nr.)

weiterhin hilfreich wären :
- anzahl.l = UDRes_CountFiles(FileID)
- filename.s = UDRes_GetFileName(FileID, Nr)

Du kannst ja mal schauen, was machbar ist.