Winamp & Shoutcast Forums

Winamp & Shoutcast Forums (http://forums.winamp.com/index.php)
-   NSIS Discussion (http://forums.winamp.com/forumdisplay.php?f=65)
-   -   call !insertmacro twice in a same function (http://forums.winamp.com/showthread.php?t=284249)

ryuthomas 2nd January 2008 23:49

call !insertmacro twice in a same function
 
Hi,

I defined a macro to check versions of a file. For simplicity, the file is always put into two different fixed directories says "C:\MyApp1" and "C:\MyApp2"

I need to search through the file and get the version, so I wrote a macro:
code:

!macro CheckFileVersion DirToCheck IsRecursive VersionToCheck RET_Code
...
...
...
!macroend



When I call it on another macro, I do:
code:

!macro CheckAllDependencies RET_ResultCode
!insertmacro CheckFileVersion "C:\MyApp1" "True" "1.0.0.1" $0
!insertmacro CheckFileVersion "C:\MyApp2" "True" "2.3038.1102.13" $1
...
...
...
!macroend



When I tried to compile, it says:
Error: label "GoToNextDir:" already declared in function

Both of this macros reside on the same file (which is a common function file, CheckAppFunction.nsh). And will be included on my installer.

Any idea how to tackle this problem? Thanks for any help in advance.

Cheers :)

ryuthomas 3rd January 2008 02:35

I found a way to get around this, with the help from this link:
http://forums.winamp.com/showthread....ight=Find+File

Basically, I need to create a function inside a macro. So, in my case it is
code:

!macro CheckFileVersion_Macro UN
Function ${UN}CheckFileVersion_Function
Pop $R0 ;acting as DirToCheck
Pop $R1 ;acting as IsRecursive
Pop $R2 ;acting as VersionToCheck
...
...
...
Push $R9 ;acting as RET_Code
FunctionEnd
!macroend

!macro CheckFileVersion_Macro_Call _UN _DirToCheck _IsRecursive _VersionToCheck _RET_RESULTCODE
Push ${_VersionToCheck}
Push ${_IsRecursive}
Push ${_DirToCheck }
Call ${_UN}IsCPLEXDLLVersionOrNewerExists_Function
Pop ${_RET_RESULTCODE}
!macroend

!macro CheckFileVersion
!define CheckFileVersion '!insertmacro CheckFileVersion_Macro_Call ""'
!insertmacro CheckFileVersion_Macro ""
!macroend


And when you want to use it, you can just simply do:
code:

!insertmacro CheckFileVersion
!macro CheckAllDependencies RET_ResultCode
${CheckFileVersion} "C:\MyApp1" "True" "1.0.0.1" $0
${CheckFileVersion} "C:\MyApp2" "True" "2.3038.1102.13" $1
...
...
...
!macroend



I hope, in the future, anyone who is learning how to use macro can take advantage of this post.

Cheers :)


All times are GMT. The time now is 04:30.

Copyright © 1999 - 2010 Nullsoft. All Rights Reserved.