└—调用 `#sub` 过程会将标识符的默认可见性改为 `private`(这是正确的),但这种更改在过程返回后仍然存在。例如:
```
#sub MySub
#emit 'hello'
#endsub
#call MySub()
#define MyVar = 42 ; 之前被错误地创建为 private
```
- ISPP 可能会错误地计算嵌套 `#elif` 和 `{#elif}` 指令之后、未被选中的脚本部分中的表达式。例如:
```
#if 0
#if 0
#elif SomeExpression ; 之前被错误地计算
#endif
#endif
```
- 此前未记录的支持函数 `IsDirSet` 和 `TypeOf2` 现在已记录并被编译器 IDE 识别。
- 此前未记录的指令 `#env` 及其简写 `#%` 现在已记录并被编译器 IDE 识别。该指令会用指定环境变量的值替换自身。示例:`AppName={#%MyAppName}`。
- 此前未记录的指令别名 `#call`(对应 `#expr`)和 `#echo`(对应 `#emit`)现在已记录并被编译器 IDE 识别。所有示例现在使用 `#call` 而不是 `#expr`。示例:`#call EmitLanguagesSection`。
- 此前未记录的指令简写 `#?`(对应 `#if`)、`#^`(对应 `#else`)和 `#.`(对应 `#endif`)现在已记录并被编译器 IDE 识别。
- 此前未记录的 `func` 和 `array` 参数类型以及 `@` 运算符现在已在“用户定义函数”帮助主题中记录。还进行了实现修复。示例:
```
#define Apply(func Callback, str Value) Callback(Value)
#define Decorate(str S) "(" + S + ")"
#emit Apply(@Decorate, "hello") ; 输出 "(hello)"
```
- 其他文档改进。
七、Pascal 脚本:
- 此前未记录的支持函数 `Abs`、`Low`、`High`、`SizeOf`、`Assigned`、`Inc`、`Dec`、`Succ`、`Pred`、`Include`、`Exclude` 和 `RaiseLastException` 现在均已记录并被编译器 IDE 识别。
- 支持函数 `TaskDialogMsgBox` 和 `SuppressibleTaskDialogMsgBox` 现在即使激活了自定义样式,也会将较长的说明文本换行显示为多行。
- 支持函数 `AddPeriod` 不再在以问号(`?`)、表意句号(`。`)或其他各种句子终止字符结尾的字符串后追加句点(完整列表请参阅文档)。它也不再在以泰语或老挝语字符结尾的字符串后追加句点,因为这些语言不以句号结束句子。对于以任何其他非控制字符结尾的字符串,将追加一个句点。此前,以空格或某些符号(如引号和括号,具体为字符 ≤ U+002E)结尾的字符串不会追加句点。此更改也会影响 Setup 和编译器自身使用 `AddPeriod` 格式化的错误消息。
- 修复:支持函数 `CreateCallback` 在一些边缘情况下得到了改进:
- 在 32 位安装程序中,按值传递的 3 字节记录、集合或静态数组参数现在能接收到正确的值。
- 在 32 位安装程序中,`Int64` 或 `UInt64` 结果现在能正确返回。
- 在 64 位安装程序中,按值传递的 8 字节或更小的记录、集合或静态数组参数,或者位于前三个位置之一的 `Extended` 或 `Currency` 参数,现在能接收到正确的值。
- 在 64 位安装程序中,现在支持不通过寄存器返回的结果,例如大于 8 字节的记录。
- 在 32 位安装程序中,此类结果仍不受支持。
- 在 32 位和 64 位安装程序中,`Currency` 结果现在都能正确返回。
- 按值返回的记录结果现在能正确返回:在 32 位安装程序中为 1 或 2 字节,或非托管 4 字节记录;在 64 位安装程序中为 1、2 或 4 字节,或非托管 8 字节记录。
- 修复:使用 DLL 文件在一些边缘情况下得到了改进:
- 在 32 位安装程序中,在 `cdecl` 或 `stdcall` 调用约定下按值传递的大于 4 字节的记录,或在任何调用约定下 4 字节或更小的静态数组,现在都能正确传递。
- 在 32 位安装程序中,按值返回的 3 字节集合结果不再发生 1 字节的越界写入。
- 在 32 位安装程序中,调用在 `pascal`、`cdecl` 或 `stdcall` 约定下返回集合或静态数组的 DLL 函数不再失败。
- 在 64 位安装程序中,按值传递的 8 字节或更小的记录、集合或静态数组参数现在能正确传递。
- 按值返回的记录结果现在能正确接收:在 32 位安装程序中为 3 字节或托管 4 字节记录;在 64 位安装程序中为 3、5、6 或 7 字节,或托管 8 字节记录。
- 按值返回的静态数组结果现在能正确接收:在 32 位安装程序中为 1 或 2 字节,或非托管 4 字节数组;在 64 位安装程序中为 1、2 或 4 字节,或非托管 8 字节数组。
- 当函数名包含 `@`(例如修饰名 `_MyFunc@8`)时,使用 `setuponly` 或 `uninstallonly` 选项导入 DLL 函数不再失败。
八、其他改进:
- Setup 日志中显示的文件时间戳现在使用 UTC 而不是本地时间,这与 `TimeStampsInUTC` 默认为 `yes` 一致。
- 将 Inno Setup 使用的 Scintilla 源代码更新到最新版本。
- 更新了官方日语、简体中文、繁体中文和亚美尼亚语翻译:某些错误消息现在以该语言自身的句号字符结尾(例如 `。`),而不是在运行时自动追加的句点。泰语也做了类似改进,因为泰语不使用句号字符。
- 修复:下载 URL 的用户名或密码中的 `+` 不再被解码为空格。
- 许多其他小改进和修复。