Tutorial: Using labels in macro's: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
m (Added category links.)
m (Adding new author and category links.)
Line 1: Line 1:
{|align=right
{{PageAuthor|Afrow UK}}
|<small>Author: [[{{ns:2}}:Afrow UK|Afrow UK]] ([[{{ns:3}}:Afrow UK|talk]], [[{{ns:-1}}:Contributions/Afrow UK|contrib]])</small>
 
|}
<br style="clear:both;">
== Description ==
== Description ==
Labels work fine in macro's until you start to insert the macro's more than once in the same Section or Function!
Labels work fine in macro's until you start to insert the macro's more than once in the same Section or Function!
Line 27: Line 25:
-Stu
-Stu


[[{{ns:14}}:Tutorials]]
[[Category:Tutorials]]

Revision as of 13:59, 24 June 2005

Author: Afrow UK (talk, contrib)


Description

Labels work fine in macro's until you start to insert the macro's more than once in the same Section or Function!

Solution

The work-around for this problem is quite simple...

## Our macro
!macro DoSomething Param
 !define UniqueID ${__LINE__}
 
 StrCmp ${Param} "something" 0 NoSomething_${UniqueID}
  ...
 NoSomething_${UniqueID}:
 
 !undef UniqueID
!macroend

What we do is create a unique identity (${UniqueID}) for each instance of !insertmacro and place this unique identity in each label reference. This ensures that all label groups are unique no matter how many times we use !insertmacro.

We use ${__LINE__} (current line number) for the UniqueID as it will always change between each !define. We have to !undef-ine UniqueID at the end of the macro too, so the next !insertmacro can re-define a new line number to UniqueID.

-Stu