在NSIS脚本语言中,当我从宏中访问全局变量时,我收到错误。
我的变量installDirectory真的是全局的吗?如何在宏或函数内设置变量installDirectory(如果在函数中可能的话)?
var installDirectory
!macro IdentifyDir
IfFileExists C:\test\9.00\ Version9 AbortInstall
Version9:
$installDirectory "C:\test\9.00\"
AbortInstall:
Abort
!macroend
Macro& /或函数也能在NSIS中返回一个值(或者我只是使用push / 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?
答案 0 :(得分:1)
有两个问题:
分配一个变量,你错过了一个赋值指令;对于字符串变量,您可以使用StrCpy
:StrCpy $installDirectory "C:\test\9.00\"
如your another question about labels中所述,标签不是sub,而只是流控制可以达到的某些定义点,因此当跳转到Version9
标签时,如果没有其他跳转,执行将会执行运行到Abort
标签后面的AbortInstall
语句。您应该 在end_of_macro:
语句之前添加!macroEnd
之类的其他标签,并在goto
标签之前添加AbortInstall
(请注意该宏扩展其中你放!insertMacro
所以你必须选择一个唯一的标签名称,它不像部分或功能)或(更优雅)反转两个标签:在中止的情况下,执行将在那里停止,在第二种情况下,它将继续在宏之外
!macro IdentifyDir
IfFileExists C:\temp\9.00 Version9 AbortInstall
AbortInstall:
Abort
Version9:
StrCpy $installDirectory "C:\test\9.00\"
!macroend
有关返回值的问题,您可以使用默认寄存器$0
至$9
和$R0
至$R9