2012-05-03 48 views
1

在NSIS脚本语言中,当我从宏中访问全局变量时出现错误。从宏内设置全局变量

我的变量installDirectory是否真的是全局的?如何从宏或函数中设置变量installDirectory(如果它可能在函数中)?

var installDirectory 

!macro IdentifyDir 
    IfFileExists C:\test\9.00\ Version9 AbortInstall 

    Version9: 
     $installDirectory "C:\test\9.00\" 
    AbortInstall: 
     Abort 
!macroend 

也可以在一个宏& /或函数返回NSIS(或SHD我只是用推/ POP)的值?

!macro IdentifyDir 
    IfFileExists C:\test\9.00\ Version9 AbortInstall 

    Version9: 
     return "C:\test\9.00\" 
    AbortInstall: 
     Abort 
!macroend 

var installDir !insertmacro IdentifyDir # is that valid? 
+2

为什么这个标签[装配] – Job

回答

1

这里有两个问题:

  • 分配一个变量,你错过了一个赋值指令;对于字符串变量,你可以使用StrCpyStrCpy $installDirectory "C:\test\9.00\"

  • your another question about labels说,标签是不是可以通过流量控制可以达到的潜艇,但只有一些定义的点,从而跃居Version9标签时,无需再次大幅执行将运行至AbortInstall标签后面的Abort声明。你应该要么把另一个标签像end_of_macro:前的!macroEnd语句,然后添加一个gotoAbortInstall标签(提防的是,宏展开其中你把!insertMacro所以你必须选择一个独特的标签名称,它不是像部分或功能)(更优雅)颠倒两个标签:在中止的情况下,执行将停在那里和在第二种情况下它将继续的宏

!macro IdentifyDir 
    IfFileExists C:\temp\9.00 Version9 AbortInstall 
AbortInstall: 
    Abort 
Version9: 
    StrCpy $installDirectory "C:\test\9.00\" 
!macroend 

你们关注的返回值的问题,你可以使用默认的寄存器$0$9$R0$R9