Es funktioniert also nicht. Beide Bibliotheken haben dieselbenm Probleme.
Der Funktionsumfang der Bibliotheken 7z.dll, 7za.dll und 7zxa.dll unterscheidet sich erheblich. Auch die Möglichkeiten der einzelnen Kompressionsalgorithmen unterscheiden sich. Alles in allem eine große Anzahl an Kombinationen. Ein Blick in eine
Beschreibung oder den Sourcecode erspart das Probieren. Die 7za.dll akzeptiert zum Beispiel für den CompressionLevel die Werte m7Copy, m7Lzma und m7Ppmd, aber nicht m7BZip2, m7Deflate und m7Deflate64. Die
Exception Message "Falscher Parameter" weist darauf hin. Den ProgressCallback realisierst du wie folgt:
Delphi-Quellcode:
...
private
function ProgressCallback(const pmcSender: I7zArchive; pmCurrent, pmTotal: Int64): HRESULT;
function ...ProgressCallback(const pmcSender: I7zArchive; pmCurrent, pmTotal: Int64): HRESULT;
const
STEP_WIDTH = 2;
var
percentDone: Integer;
begin
Result := S_OK;
if pmCurrent = 0 then
begin
ProgressBar.Min := 0;
ProgressBar.Max := 100;
ProgressBar.Position := 0;
end
else if pmCurrent >= pmTotal then
ProgressBar.Position := 0
else
begin
percentDone := Trunc(pmCurrent / (pmTotal / 100));
if (ProgressBar.Position + STEP_WIDTH) < percentDone then
ProgressBar.Position := percentDone;
end;
end;
var
zipFileName: TFileName;
libWriter: I7zWriter;
begin
zipFileName := MakePath([Executable.ProgramFilePath, 'TestDaten.7z']);
var timer: TPrecisionTimer;
libWriter := New7zWriter(fh7z);
libWriter.SetCompressionLevel(3);
libWriter.SetProgressCallback(ProgressCallback);
timer.Start;
libWriter.AddFiles('c:\...\mORMot2\src\', '', '*', True);
libWriter.SaveToFile(zipFileName);
ShowMessage(timer.Stop);
Die Funktion
MakePath([Executable.ProgramFilePath, 'TestDaten.7z']);
macht das, was der Name sagt. Die mORMot Lösungen sind nur viel pragmatischer als die Delphi Bordmittel.
Bis bald...
Thomas