Решил прикрутить к HiAsm 7 zip (7z.dll)
В общем, получилось.
Использовал для этого 7zip API
Кроме того, для правильной работы 7zip API пришлось прикрутить к HiAsm Delphi 7.
Закинул sevenzip.pas в \HiAsm_AltBuild\Elements\delphi\code\
Но ввиду моих незначительных знаний в Delphi не все получается...
Вот текст моего IC
IC code
#pas
unit HiAsmUnit;
interface
uses kol, Share, Debug, sevenzip, Messages;
type
THiAsmClass = class(TDebug)
private
public
//Data
SourseFile:THI_Event; //Файл архива для извлечения или файл для сжатия
DestPatch:THI_Event; //Каталог для извлечения
OutFile:THI_Event; //Имя файла архива
CLevel:THI_Event; //Степень сжатия
CMethod:THI_Event; //Метод сжатия
//Event
onFinish:THI_Event; //Событие после завершения сжатия/извлечения
onProgress:THI_Event; //Устанавливает текущее значение прогресс-бара
onProgressMax:THI_Event;//Устанавливает максимальное значение прогресс-бара
//doWork
procedure doExtract(var _Data:TData; Index:Word); //Извлечение файлов из архива в указанный каталог
procedure doCreate(var _Data:TData; Index:Word); //Сжатие указанного файла
function ProgressCallback(sender: Pointer; total: boolean; value: int64): HRESULT; stdcall; //Функция вывода данных на прогресс-бар
end;
implementation
var sf: String;
dp: String;
ouf: String;
function ProgressCallback(sender: Pointer; total: boolean; value: int64): HRESULT; stdcall; //Функция вывода данных на прогресс-бар
begin
if total then
_hi_onEvent(onProgressMax, value) else //Error: Undeclared identifier: 'onProgressMax', Error: There is no overloaded version of '_hi_OnEvent' that can be called with these arguments
_hi_onEvent(onProgress, value); //Error: Undeclared identifier: 'onProgress', Error: There is no overloaded version of '_hi_OnEvent' that can be called with these arguments
Result := S_OK;
end;
procedure THiAsmClass.doExtract; //Извлечение файлов из архива в указанный каталог
begin
sf:= ReadString(_Data,SourseFile);
dp:= ReadString(_Data,DestPatch);
with CreateInArchive(CLSID_CFormat7z) do
begin
OpenFile(sf);
ExtractTo(dp);
end;
_hi_OnEvent(onFinish,'');
end;
procedure THiAsmClass.doCreate; //Сжатие указанного файла
var
Arch: I7zOutArchive;
Met: T7zCompressionMethod; //T7zCompressionMethod = (m7Copy, m7LZMA, m7BZip2, m7PPMd, m7Deflate, m7Deflate64)
begin
sf:= ReadString(_Data,SourseFile);
ouf:= ReadString(_Data,OutFile);
Met:= ReadData(_Data, CMethod); //#### Как правильно считать данные с точки? ####
Arch:= CreateOutArchive(CLSID_CFormat7z);
begin
Arch.AddFile(sf, ExtractFileName(sf)); //Указываем файл для сжатия
SetCompressionLevel(Arch, ReadInteger(_Data, CLevel));//Устанавливаем степень сжатия
SevenZipSetCompressionMethod(Arch, Met);//Устанавливаем метод сжатия Error: Incompatible types: 'T7zCompressionMethod' and 'TData' ####
Arch.SetProgressCallback(nil, ProgressCallback); //Взываем функцию вывода информации на прогресс-бар
Arch.SaveToFile(ouf) //Указываем имя архива
end;
Arch:= nil;
_hi_OnEvent(onFinish, '');
end;
end.
Собственно, просьба помочь исправить эти ошибки.