AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign d7zip / sevenzip.pas von mail2nnv - Fragen zur Funktionsweise, DictionarySize, ...
Thema durchsuchen
Ansicht
Themen-Optionen

d7zip / sevenzip.pas von mail2nnv - Fragen zur Funktionsweise, DictionarySize, ...

Ein Thema von DieDolly · begonnen am 29. Apr 2023 · letzter Beitrag vom 9. Mai 2023
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#21

AW: d7zip / sevenzip.pas von mail2nnv - Fragen zur Funktionsweise, DictionarySize, ..

  Alt 30. Apr 2023, 22:08
Hallo,

nur so am Rande: Von welcher 7Zip.dll reden wir (siehe Anhang)?

Ich habe folgende im Angebot:

https://github.com/mail2nnv/d7zip = m2n.png
https://github.com/geoffsmith82/d7zip = hg_x86, hg_x64
Unbekannt = Unbekannt
KodeZwerg = m2n (bezogen auf die Versions-Nr. 4.65.0.0
Miniaturansicht angehängter Grafiken
hg_x64.png   hg_x86.png   m2n.png   unbekannt.png  
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#22

AW: d7zip / sevenzip.pas von mail2nnv - Fragen zur Funktionsweise, DictionarySize, ..

  Alt 30. Apr 2023, 22:32
DLL in Exe als Resource kenne ich, aber was hat es mit Obj-Dateien aufsich? Sind Obj-Dateien leichter zu behandeln, braucht es dafür keinen komplizierten Wrapper mehr?
OBJ ist ein vorkompilierter Code (egal von welcher Programmiersprache), welcher direkt in unsere Kompilate integriert werden kann. (bissl vergleichbar mit unseren DCU)
Beispiele sind z.B. die Funktionen von MIDAS (MidasLib.pas), ZLib (System.ZLib.pas oder IdZLibHeaders.pas), RegEx (System.RegularExpressionsAPI.pas > System.RegularExpressions.pas), JPEG (Vcl.Imaging.jpeg.pas), PNG (nicht mehr) oder Delphi-Referenz durchsuchenDelayed-Loading (SysInit.pas).


Die DLL in den Resourcen mußt du erst draußen speichern, um sie zu laden, oder etwas böser in den RAM laden und manuell von dort laden. (und hoffen der Virenscanner hat nix dagegen)


Theoretisch kann man nahezu jeden C++-Code als OBJ kompileren und so ins Delphi pringen.
Ich bin noch am Experimentieren, GIT so ins Delphi zu bekommen, also um optimaler damit zu arbeiten. (Beispiel ist TortoiseGit, welches teilweise die GitLib integriert hat, aber auch teilweise direkt mit der GIT.exe redet ... z.B. Krank beim Revert jede Datei mit je zwei GIT.exe-Aufrufen extrem langsam und Anderes aber intern sehr schnell)

nur so am Rande: Von welcher 7Zip.dll reden wir (siehe Anhang)?
Am Besten vom aktuellen Original?
https://7-zip.de/download.html
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (30. Apr 2023 um 22:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#23

AW: d7zip / sevenzip.pas von mail2nnv - Fragen zur Funktionsweise, DictionarySize, ..

  Alt 30. Apr 2023, 22:33
Ich denke mit 7z ist das einfacher und der Code ist selbsterklärend-"er".
Die Aufrufe sind analog zur sevenzip.pas.
Auf jeden Fall (jedenfalls von meiner Seite her)
Ich habe es so versucht, jedoch ohne Erfolg beim umstellen des SetCompressionLevel, da ich daran schon scheitere habe ich die weiteren features nicht weiter angerührt.
Delphi-Quellcode:
procedure TfrmMain.btnCreateClick(Sender: TObject);
var
  zipFileName: TFileName;
  libWriter: I7zWriter;
begin
  zipFileName := MakePath([Executable.ProgramFilePath, 'TestDaten.7z']);
  if (cbFormat.ItemIndex <= 0) then
    cbFormat.ItemIndex := 7;
  libWriter := New7zWriter(T7zFormatHandler(cbFormat.ItemIndex), '7z.dll');
// libWriter := New7zWriter(fh7z, '7z.dll');
  libWriter.SetCompressionLevel(cbLevel.ItemIndex);
// libWriter.SetCompressionLevel(0); // von 0 bis 9 alle getestet, es kommt immer das gleiche raus
  libWriter.SetCompressionMethod(TZipCompressionMethod(cbMethod.ItemIndex));
// libWriter.SetCompressionMethod(mzLzma);
  libWriter.AddFile('7z.dll', '7z.dll');
  libWriter.SaveToFile(zipFileName);
  libWriter := Nil;
end;
(die auskommentierten zeilen zeigen was sich hinter meinen Indexen verbirgt)
Aber sehr positiv zu erwähnen, BZip2 funktioniert.
Da ich in der mormot.lib.win7zip.pas Datei leider keine Informationen finde auf welcher Bibliothek-Version es basiert habe ich es mit der aktuellen 64bit 7z.dll (22.1.0.0) getestet.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#24

AW: d7zip / sevenzip.pas von mail2nnv - Fragen zur Funktionsweise, DictionarySize, ..

  Alt 30. Apr 2023, 22:54
Zitat:
Am Besten vom aktuellen Original?
Also die 22.01 von hg oder dem Original.

Da hätten wir dann auch gleich die(?) Ausgangsbasis(hg).
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
461 Beiträge
 
#25

AW: d7zip / sevenzip.pas von mail2nnv - Fragen zur Funktionsweise, DictionarySize, ..

  Alt 30. Apr 2023, 23:38
Ich habe es so versucht, jedoch ohne Erfolg beim umstellen des SetCompressionLevel, da ich daran schon scheitere habe ich die weiteren features nicht weiter angerührt.
Ich habe es mit der 32-Bit Version 22.01 der 7za.dll getestet. Wenn die DLL im Programmverzeichnis liegt, gebe keinen Bibliothekspfad an, mORMot sucht sie. Laut dieser Beschreibung sind für den CompressionLevel die Werte 1/3/5/7/9 zulässig. Bei mir funktioniert es. Du darfst es nicht mit den synthetischen Random-Testdaten versuchen, damit ist ab einem gewissen Level jeder Algorithmus überfordert.
Delphi-Quellcode:
var
  zipFileName: TFileName;
  libReader: I7zReader;
  libWriter: I7zWriter;
  content: RawByteString;
begin
  content := StringFromFile(MakePath([Executable.ProgramFilePath, 'mormot.lib.openssl11.pas']));
  zipFileName := MakePath([Executable.ProgramFilePath, 'TestDaten.7z']);

  libWriter := New7zWriter(fh7z);
  libWriter.SetCompressionLevel(7); // x Parameter (1/3/5/7/9)
  libWriter.AddBuffer('Lib\mormot.lib.openssl11.pas', content);
  libWriter.SaveToFile(zipFileName);
  libWriter := Nil;

  libReader := New7zReader(zipFileName);
  var libData: RawByteString := libReader.Extract('Lib\mormot.lib.openssl11.pas');
  if (Length(content) = Length(libData))
    and CompareMem(Pointer(content), Pointer(libData), Length(content)) then
  begin
    ShowMessage('Ok!');
  end;
Benchmark-Werte:
LevelDateigrößeLaufzeit [ms]
Original340.019 
154.03511
353.74211
548.81135
747.95942
947.95942

Bis bald...
Thomas

Geändert von mytbo (30. Apr 2023 um 23:50 Uhr) Grund: Laufzeit hinzugefügt
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#26

AW: d7zip / sevenzip.pas von mail2nnv - Fragen zur Funktionsweise, DictionarySize, ..

  Alt 1. Mai 2023, 00:16
Thomas Dankeschön für Dein weiteres Beispiel samt Erklärung und den Link!
libWriter.SetCompressionMethod(); Das mag er nicht, habe es nun mit der 64bit 7za.dll v22.1.0.0 (ohne dll Angabe) erfolgreich getestet (Level 0 = copy, alles darüber ist LZMA2)
(Ich bin beim AddFile() geblieben)
Du darfst es nicht mit den synthetischen Random-Testdaten versuchen, damit ist ab einem gewissen Level jeder Algorithmus überfordert.
Das habe ich nicht verstanden, aber hey, nun akzeptiert er meinen Input
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#27

AW: d7zip / sevenzip.pas von mail2nnv - Fragen zur Funktionsweise, DictionarySize, ..

  Alt 1. Mai 2023, 00:22
Laut dieser Beschreibung sind für den CompressionLevel die Werte 1/3/5/7/9 zulässig. Bei mir funktioniert es.
Von 0 bis 9 ist alles möglich, aber die geraden Werte werden einfach abgerundet, da sie nicht implementiert sind.
Selbes gilt übrigens auch für ZIP.

LZ4 wäre hier eine nette Sache, aber eigentlich hätte ich es gern in einer zip-Datei, anstatt in einer 7z.
Und auch wenn man hier 7-Zip dafür verwenden könnte etwas im Buffer/RAM zu komprimieren.
Eine sauschnelle Komprimierung bietet viele Vorteile (auch wenn es nicht unbedingt extrem viel Platz einspart)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 1. Mai 2023 um 00:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.468 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#28

AW: d7zip / sevenzip.pas von mail2nnv - Fragen zur Funktionsweise, DictionarySize, ..

  Alt 1. Mai 2023, 08:45
Von welcher 7Zip.dll reden wir (siehe Anhang)?

Ich habe folgende im Angebot:

https://github.com/mail2nnv/d7zip = m2n.png
https://github.com/geoffsmith82/d7zip = hg_x86, hg_x64
Unbekannt = Unbekannt
KodeZwerg = m2n (bezogen auf die Versions-Nr. 4.65.0.0
Ich verwende immer die aus dem offiziellen Installer von https://www.7-zip.org . Für Delphi immer die 32 Bit dll, weil ich außer ein paar Tests keine 64 Bit Delphi Projekte habe.
Thomas Mueller

Geändert von dummzeuch ( 1. Mai 2023 um 08:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.468 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#29

AW: d7zip / sevenzip.pas von mail2nnv - Fragen zur Funktionsweise, DictionarySize, ..

  Alt 1. Mai 2023, 08:48
Die DLL in den Resourcen mußt du erst draußen speichern, um sie zu laden, oder etwas böser in den RAM laden und manuell von dort laden. (und hoffen der Virenscanner hat nix dagegen)
Es geht auch ohne, zumindest mit den meisten DLLs (7zip habe ich nicht probiert). Ich habe dafür eine Unit, die sich um Relocation und ermitteln der Entry-Points kümmert. Da wird nichts auf Platte gespeichert.

Allerdings warte ich jeden Tag darauf, dass die Virenscanner darauf allergisch reagieren.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.468 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#30

AW: d7zip / sevenzip.pas von mail2nnv - Fragen zur Funktionsweise, DictionarySize, ..

  Alt 1. Mai 2023, 08:52
Ich hätte nämlich definitiv Interesse an einer funtionierenden Import-Unit für die 7z.dll, da ich nach meinem Urlaub damit große Dateien ein- und auspacken wollte, und zwar idealerweise mit bzip2.
Wenn es auch die mORMot Unit mormot.lib.win7zip sein darf
Definitiv. Werde ich mir nach meiner Rückkehr ansehen. Danke für den Hinweis.
Thomas Mueller
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz