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"