Einzelnen Beitrag anzeigen

DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#5

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

  Alt 30. Apr 2023, 14:11
Danke für die Demo und das Testen.

Es muss doch eine andere Möglichkeit geben, um bzip2, deflate usw zum Laufen zu bekommen. Eine DLL von 2009 kann nicht die Lösung sein.
Die API setzt das Property 0 (Null) für die Kompressionsmethode. Vielleicht ist das veraltet bzw. die Namensgebung SevCompressionMethod: array[T7zCompressionMethod] of UnicodeString = ('COPY', 'LZMA', 'BZIP2', 'PPMD', 'DEFLATE', 'DEFLATE64');
Für das LZMA-Problem habe ich eine Lösung. In der SetMultithreading-Prozedur steht normalerweise
Delphi-Quellcode:
procedure SetMultiThreading(Arch: I7zOutArchive; ThreadCount: Cardinal);
begin
 SetCardinalProperty(arch, 'MT', ThreadCount);
end;
Das abgeändert zu dem hier und das LZMA-Problem ist weg
Delphi-Quellcode:
procedure SetMultiThreading(Arch: I7zOutArchive; ThreadCount: Cardinal);
begin
 // SetCardinalProperty(arch, 'MT', ThreadCount);

 if ThreadCount > 1 then
  SetCardinalProperty(arch, 'MT', ThreadCount)
 else if ThreadCount <= 0 then
  SetBooleanProperty(arch, 'MT', False);
end;
Das Problem liegt also bei 7z selbst.

Vielleicht hilft die Community ja mit, dass Delphi endlich eine sehr gut funktionierende 7z-DLL-API bekommt. Die von Jedi in allen Ehren, aber die ist nix.

Was mir auch aufgefallen ist:
- Kompressionslevel SAVE und Kompressionsmethode COPY funktionieren nur im Single-Threaded-Modus
-- funktionieren außerdem nur, wenn EncryptHeaders nicht an ist. Ist EncryptHeaders an, sind wir wieder beim LZMA-Problem.

Die hier vorgestellte API schreibt die 7z Kompressionsmethode ins Property 0 (Null). Ich weiß nicht wie aktuell diese Seite ist, aber hier ist die Rede vom Property N https://sevenzip.osdn.jp/chm/cmdline...d.htm#MethodID

Will man das machen kommt aber wieder nur, wie immer "Fehler bei Bereichsprüfung"

Geändert von DieDolly (30. Apr 2023 um 14:52 Uhr)
  Mit Zitat antworten Zitat