Вверх ↑
Ответов: 4630
Рейтинг: 749
#1: 2014-08-09 18:06:36 ЛС | профиль | цитата
К полю onProgressMax можно обращаться только из методов класса THiAsmClass, либо через экземпляр класса.
procedure THiAsmClass.doCreate; является методом класса, поэтому обращаться к своим полям можно.
function ProgressCallback просто глобальная процедура и не знает о существовании THiAsmClass. Для таких случаев в callback-функцию предусматривается передача пользовательского параметра. Таким параметром можно передать указатель на экземпляр класса THiAsmClass, через который можно будет получить доступ к его полям. Смотри API. В частности, что значит параметр
ProgressCallback(sender: Pointer; total: boolean; value: int64): HRESULT; stdcall;


sashaoli писал(а):
Кроме того, для правильной работы 7zip API пришлось прикрутить к HiAsm Delphi 7
Уверен, там нет ничего особенного, чтобы оно не работало и на старом Delphi.

sashaoli писал(а):
Как правильно считать данные с точки?
Met := T7zCompressionMethod(ReadInteger(_Data, CMethod));

------------ Дoбавленo в 18.06:

#pas
function ProgressCallback(sender: Pointer; total: boolean; value: int64): HRESULT; stdcall;
begin
if total then
_hi_onEvent(THiAsmClass(sender).onProgressMax, value) else
_hi_onEvent(THiAsmClass(sender).onProgress, value);
Result := S_OK;
end;

procedure THiAsmClass.doCreate;
var
...
begin
...
Arch.SetProgressCallback(Self, ProgressCallback);
...
end;
карма: 26

0