NSIS 代码 if-else 到堆栈操作
NSIS code if-else to stack operation
说到nsis的栈操作,我总是一头雾水。现在我正在编写一小段代码来修剪字符串中的尾随 space。
Input:
C:\Program Files (x86)\COMPANY\ or C:\Program Files (x86)\COMPANY
输出:
C:\Program Files (x86)\COMPANY
工作代码 - 正常 if-else
!define TrimPath '!insertmacro "_TrimPath"'
!macro _TrimPath _FOLDERPATH
StrCpy [=10=] `${_FOLDERPATH}` 1 -1
${If} [=10=] == "\"
StrCpy `${_FOLDERPATH}` -1
StrCpy `${_FOLDERPATH}`
${EndIf}
!macroend
错误代码 - 堆栈操作
!define TrimPath '!insertmacro "_TrimPath"'
!macro _TrimPath _FOLDERPATH
Exch [=11=]
StrCpy [=11=] 1 -1
StrCmp "\" +2 +1
StrCpy [=11=] -1
StrCpy [=11=]
Pop [=11=]
Exch
!macroend
任何人都可以纠正我并指出我哪里错了吗?
我认为您正在尝试将宏用作函数。一些 comments/questions/hints:
- 为什么要使用
Exch
来交换堆栈顶部的值,而不是使用 _FOLDERPATH
?
- 在调用宏之前是否将参数压入堆栈?类似于:
push $path
${Trimpath}
Pop [=12=]
恢复 $0 的值,但随后您调用 Exch $1,它会将堆栈顶部的值(未知值,可能堆栈为空)与 $1 交换。为什么??如果要将结果存入栈中,只需push
.
说到nsis的栈操作,我总是一头雾水。现在我正在编写一小段代码来修剪字符串中的尾随 space。
Input:
C:\Program Files (x86)\COMPANY\ or C:\Program Files (x86)\COMPANY
输出:
C:\Program Files (x86)\COMPANY
工作代码 - 正常 if-else
!define TrimPath '!insertmacro "_TrimPath"'
!macro _TrimPath _FOLDERPATH
StrCpy [=10=] `${_FOLDERPATH}` 1 -1
${If} [=10=] == "\"
StrCpy `${_FOLDERPATH}` -1
StrCpy `${_FOLDERPATH}`
${EndIf}
!macroend
错误代码 - 堆栈操作
!define TrimPath '!insertmacro "_TrimPath"'
!macro _TrimPath _FOLDERPATH
Exch [=11=]
StrCpy [=11=] 1 -1
StrCmp "\" +2 +1
StrCpy [=11=] -1
StrCpy [=11=]
Pop [=11=]
Exch
!macroend
任何人都可以纠正我并指出我哪里错了吗?
我认为您正在尝试将宏用作函数。一些 comments/questions/hints:
- 为什么要使用
Exch
来交换堆栈顶部的值,而不是使用_FOLDERPATH
? - 在调用宏之前是否将参数压入堆栈?类似于:
push $path
${Trimpath}
Pop [=12=]
恢复 $0 的值,但随后您调用 Exch $1,它会将堆栈顶部的值(未知值,可能堆栈为空)与 $1 交换。为什么??如果要将结果存入栈中,只需push
.