помогите забороть странный колбек:
Скрытый текст
[Setup]
AppName=DeltaMAX
AppVerName=DeltaMAX 2.0.1.0
DefaultDirName={tmp}
OutputDir=c:\Files\
[code]
type
EnumCallback=procedure(retcode: integer;lpUser:Longint);
function WrapMyCallback(callback:EnumCallback; paramcount:integer):longword;
external 'wrapcallback@{sd}\Files\innocallback.dll stdcall';
type
DELTAMAX_ENCODE_OPTIONS = record
lpszLicensedTo: ansistring;
lpszLicenseKey: ansistring;
nMemoryMax: Integer;
nMemoryMaxPercent: Integer;
nFreeMemoryMin: Integer;
nLowMemMode: Integer;
nFootprintSize: Integer;
bAutoIncreaseFootprintSize: bool;
bEnableMultiPass: bool;
nMultiPassThreshold: Integer;
nMultiPassMaxAdditionalPasses: Integer;
pProgressCallback: longword;
lpUserData: integer;
end;
procedure DeltaMAXInitEncodeOptions(pOptions: DELTAMAX_ENCODE_OPTIONS);
external 'DeltaMAXInitEncodeOptions@{sd}\Files\DeltaMAX.dll cdecl';
function DeltaMAXEncode(szSource: ansistring; szTarget: ansistring; szDiff: ansistring; pOptions: DELTAMAX_ENCODE_OPTIONS): Integer;
external 'DeltaMAXEncode@{sd}\Files\DeltaMAX.dll cdecl';
procedure ProcessDiff(code: integer; lpUser:Longint);
begin
MsgBox('data', mbError, MB_OK);
end;
var
Data: PAnsiChar;
Options: DELTAMAX_ENCODE_OPTIONS;
callback:longword;
userdata:ansistring;
function initializesetup():boolean;
var
err: Integer;
n,s: ansistring;
begin
callback:=WrapMyCallback(@ProcessDiff,2);
n := 'DEMO';
s := 'DEMO';
DeltaMAXInitEncodeOptions(Options);
Options.lpszLicensedTo := n;
Options.lpszLicenseKey := s;
Options.nMemoryMax := 0;
Options.nMemoryMaxPercent := 80;
Options.nFreeMemoryMin := 8;
Options.nLowMemMode := 1;
Options.nFootprintSize := 0;
Options.bAutoIncreaseFootprintSize := true;
Options.bEnableMultiPass := false;
Options.nMultiPassThreshold := 0;
Options.nMultiPassMaxAdditionalPasses := 1;
//Options.lpUserData := 0;
//Options.pProgressCallback := callback;
err := DeltaMAXEncode('D:\1.txt', 'D:\2.txt', 'D:\patch.diff', Options);
if err <> 0 then
MsgBox('Bad! ' + IntToStr(err), mbError, MB_OK) else
MsgBox('Success! ' + IntToStr(err), mbError, MB_OK);
end;
сам sdk в аттаче. нужно, чтобы в структуре параметр pProgressCallback корректно исполнял колбек для обсчета процентов согласно документации SDK. полагаю, у меня ошибка в данных lpUserData, я не знаю какой указатель и куда должен быть использован.
для использования надо из папки SDK\Redist скопировать ANSI версию DeltaMAX.dll в C:\Files, туда же InnoCallback.dll.
также нужно поместить 1.txt и 2.txt с различающимися данными. D:\patch.diff - сюда будут записаны файл с изменениями.
из соображений копирайтов, серийный номер не прикладываю, нужно будет подождать пять секунд и нажать OK для запуска процесса.