注意 | 此命令在 Core 和 Vulcan 方言中不可用。 |
Note | 该命令在头文件中定义,将由 X# 预处理器预处理为函数调用。如果禁用标准头文件 (-nostddefs),该命令将不可用。如果告诉编译器使用不同的标准头文件(-stddef ),则此命令也可能不可用。 |
重新创建之前保存到文件中的公有变量和私有变量,并用它们之前的值进行初始化。
RESTORE FROM <xcSourceFile> [ADDITIVE]
<xcSourceFile> | 内存文件的名称(例如用 SAVE 创建的文件),包括可选的驱动器、目录和扩展名。 有关文件搜索和创建规则,请参阅 SetDefault() 和 SetPath()。 默认扩展名为 .MEM。 |
此命令尝试以共享模式打开 <xcSourceFile>。 如果文件不存在,将出现运行时错误。 如果文件成功打开,则继续执行操作。 如果由于其他进程独占该文件等原因而拒绝访问,NetErr() 将被设置为 TRUE。 |
ADDITIVE | 将从内存文件加载的内存变量添加到现有内存变量池中。 |
变量的作用域不会随变量一起保存,而是在恢复变量时建立。 数组和已声明变量不能被保存或还原。
恢复内存变量时,它们将作为私有变量重新创建,并与当前过程或函数的作用域保持一致,除非它们作为公有变量存在并指定了 ADDITIVE 子句。 如果指定了 ADDITIVE 子句,除非使用 PRIVATE 隐藏,否则同名的公有变量和私有变量会被覆盖。 如果未指定 ADDITIVE 子句,则在加载内存文件之前,所有公有变量和私有变量都会被释放。
恢复保存在 CLIPPER 程序中的变量时,变量名将被截断为 10 个字符。 这是因为 CLIPPER 只识别前 10 个字符,并只使用这些字符生成 .MEM 文件。 而 XSharp 则支持所有字符。 例如,在 CLIPPER 中,两个变量名 ThisIsALongVariable 和 ThisIsALon 指的是同一个变量;而在 XSharp 中,情况并非如此。
注意:已声明的变量不受 RESTORE 命令的影响。 如果在当前例程中声明了一个变量,并且恢复了一个同名变量,那么只有声明的变量可见,除非在引用恢复的变量前使用 _MEMVAR-> 别名。
本例演示了 SAVE 和 RESTORE 的典型应用。 这里使用 SAVE TO 和 RESTORE FROM 创建了包含屏幕的内存变量:
// 创建并使用屏幕伪数组
SAVE SCREEN TO cScreen1
SAVE ALL LIKE cScreen* TO Screens
<Statements>...
RESTORE FROM Screens ADDITIVE
nNumber = "1"
RESTORE SCREEN FROM ("cScreen" + nNumber)
XSharp.RT.DLL
LOCAL, PRIVATE, PUBLIC, SAVE, SetDefault(), SetPath()