来自FileFunc.nsh的$ {GetDrives}是否清除了在回调中创建的堆栈值?

时间:2014-02-04 20:26:30

标签: nsis

为什么当stack_test函数被${GetDrives}调用时,堆栈不会保留“Hello”,但是当使用Call stack_test时,堆栈中存在“Hello” ?

我希望看到这个:

$0 = Hello
$0 = Hello

但我看到了这一点:

$0 = Goodbye
$0 = Hello

以下是我正在使用的测试案例:

!include FileFunc.nsh

Name stack_test
OutFile stack_test.exe
ShowInstDetails show

Page instfiles


Function stack_test
    Push "Hello"
FunctionEnd

Section section1
    Push "Goodbye"
    ${GetDrives} "HDD" stack_test
    Pop $0
    DetailPrint "$$0 = $0"

    Push "Goodbye"
    Call stack_test
    Pop $0
    DetailPrint "$$0 = $0"
SectionEnd

1 个答案:

答案 0 :(得分:0)

GetDrives需要回调函数将某些内容推送到堆栈,并在回调后返回。如果按“StopGetDrives”,则中止驱动器枚举,否则如果有更多驱动器则继续。

如果它们处于这样的回调函数中,你不应该期望你的堆栈更改能够存活,并且推送次数取决于最终用户在这种情况下拥有多少驱动器......