» Relative Jumps: Относительные переходы

K.A.V.
www.oszone.net
22.02.2010
Автор: kotkovets
Последнее обновление: 18.12.2010

В отличие от меток, относительные переходы, дают возможность перейти к строке кода относительно места, где указана команда перехода
Вы можете использовать относительные переходы везде, где можно использовать метки. Относительные переходы указываются числами.
К примеру:
+1 переход к следующей строке кода (заданный по умолчанию переход).
+2 пропустит одну строку кода и перейдет к следующей строке кода.
-2 перейдет на две строки команд назад.
+10 пропустит 9 строк команд, и переход к десятой, относительно текущей строки кода.
Goto +2
MessageBox MB_OK "You will never ever see this message box"
MessageBox MB_OK "The last message was skipped, this one should be shown"
Goto +4
MessageBox MB_OK "The following message will be skipped"
Goto +3
MessageBox MB_OK "You will never ever see this message box"
Goto -3
MessageBox MB_OK "Done"
Команды выполняющиеся при компиляции скрипта такие как: AddSize, Section, SectionEnd, SetOverwrite, SectionGroup, Function,
FunctionEnd, (все флаги компилятора), Name, SetFont, LangString, !macro, !macroend, так же сами метки - не учитываются!
И еще отметим, что макрос в скрипте - не рассматривается как одна команда!
Таким образом относительный переход осуществляется по строкам команд, находящихся в блоке макрокоманды.
Этот пример не пропустит макрос, а покажет сообщение:
SetOutFile "relative_jump.exe"
ShowInstDetails show

!macro relative_jump_test
  MessageBox MB_OK "1 команда макроса"
  MessageBox MB_OK "2 команда макроса"
  MessageBox MB_OK "3 команда макроса"
!macroend

Section
 Goto +3
 !insertmacro relative_jump_test
SectionEnd