Генерация исключения

hexep

Мимокрокодил
Скрипт для расширенной версии Inno Setup:
Код:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=userdocs:Inno Setup Examples Output

[Files]
Source: "MyProg\MyProg.exe"; DestDir: "{app}"

[Code]

function InitializeSetup(): Boolean;
begin
  try
    ExpandConstant('{exception}');
  except
    MsgBox(Format('Runtime error (at %d:%d)'#13#10, [ExceptionProc, ExceptionPos]) + ExceptionToString(ExceptionType, ExceptionParam), mbError,  MB_OK);
  end;
end;

Вопрос - что за значения отображают ExceptionProc и ExceptionPos?

В моем случае отображаются 10 и -2.
 

SBalykov

Старожил
Скрипт для расширенной версии Inno Setup:
Код:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=userdocs:Inno Setup Examples Output

[Files]
Source: "MyProg\MyProg.exe"; DestDir: "{app}"

[Code]

function InitializeSetup(): Boolean;
begin
  try
    ExpandConstant('{exception}');
  except
    MsgBox(Format('Runtime error (at %d:%d)'#13#10, [ExceptionProc, ExceptionPos]) + ExceptionToString(ExceptionType, ExceptionParam), mbError,  MB_OK);
  end;
end;

Вопрос - что за значения отображают ExceptionProc и ExceptionPos?

В моем случае отображаются 10 и -2.
Соотносится с процедурой RaiseLastException - вызов последнего исключения.
Exception - исключение. Соответственно:

ExceptionProc - исключая процедуру (Cardinal);
ExceptionPos - исключая позицию (Cardinal);
ExceptionType - исключая тип (TIFException);
ExceptionParam - исключая параметр (String).
 

hexep

Мимокрокодил
SBalykov,
ExceptionType - тип исключения (ErDivideByZero, ErMathError, erCouldNotCallProc, erOutofRecordRange, erOutOfMemory и т.п.);
ExceptionParam - текст сообщения об ошибке;
ExceptionProc - исключение в процедуре, но какой? что за возвращаемое значение 10?
ExceptionPos - что за позиция, где или относительно чего, что за -2?
 

El Sanchez

Новичок
ExceptionProc - исключение в процедуре, но какой? что за возвращаемое значение 10?
Индекс процедуры, в которой произошло исключение, из внутреннего списка процедур байт-кода. В дампе байт-кода у вас будет что-то типа Proc [10] Export: INITIALIZESETUP 26
ExceptionPos - что за позиция, где или относительно чего, что за -2?
-2: искючение поймано и обработано (код обернут в try - except)
-1: исключение поймано, но не обработано (код обернут в try - finally)
> 0: позиция относительно начала байт-кода процедуры, в которой произошло исключение (код не обернут в try - except - finally)
 
Сверху