设置 Unicode

要设置和使用 Unicode,必须执行特定步骤,以便 API 在服务器上注册 Unicode 文件空间,并且该文件空间中的所有文件名成为 Unicode 字符串。

限制: 不能将 Unicode 和非 Unicode 文件名存储在同一文件空间中。
  1. 使用 -DUNICODE 标志编译代码。
  2. 应用程序中的所有字符串必须为 wchar 字符串。
  3. 对于对 API 的调用,遵循 tsmapitd.h 文件中结构以及 tsmapifp.h 文件中的函数定义。
  4. tsmInitEx 函数调用上,将 useUnicode 标志设置为 bTrue 。 任何新文件空间均注册为 Unicode 文件空间。

向先前注册的非 Unicode 文件空间发送数据时,API 继续将文件名作为非 Unicode 发送。 将服务器上的旧文件空间重命名为 fsname_old 并为新数据启动新的 Unicode 文件空间。 API 从旧文件空间恢复非 Unicode 数据。 使用在查询文件空间上返回的 tsmQryRespFSData 结构中的 bIsUnicode 字段来确定文件空间是否为 Unicode。

每个 dsmXXX 函数调用均具有一个匹配的 tsmXXX 函数调用。 两者之间的区别在于所使用的结构。 在使用 UNICODE 标志编译所有 tsmXXX 函数调用结构时,它们均具有 dsChar_t 类型(对于字符串值)。 dsChar_r 映射到 wchar。 这两个接口之间没有任何区别。
限制: 使用一个接口或另一个接口。 请勿混用 dsmXXX 函数调用和 tsmXXX 函数调用接口。 确保使用 IBM® Storage Protect 结构和 IBM Storage Protect 版本定义。

部分常量继续在 dsmapitd.h 文件中定义,因此在编译时您需要 dsmapitd.h 和 tsmapitd.h 这两个文件。

您可以在其他操作系统(如 UNIX 或 Linux® )上使用 IBM Storage 保护接口,但在这些操作系统上, dsChar_t 类型映射为 char,因为 Windows 操作系统支持 Unicode。 使用 IBM Storage Protect 界面,您只需编写一个应用程序的变体,并在多个操作系统上进行编译。 如果要编写新的应用程序,请使用 IBM Storage 保护界面。

如果正在升级现有应用程序:

  1. dsmXXX 函数调用结构和调用转换为 IBM Storage Protect 接口。
  2. 迁移现有文件空间。
  3. 在将 useUnicode 标志设置为 true 的情况下备份新文件空间。
注: 使用支持 Unicode 的客户机访问节点后,无法使用较旧版本的 API 或来自其他操作系统的 API 连接到同一节点名。 如果您的应用程序使用交叉平台功能,请勿使用 Unicode 标志。 在 Unicode 和非 Unicode 操作系统之间没有交叉平台支持。

启用 useUnicode 标志时,所有字符串结构均视为 Unicode 字符串。 在服务器上,仅以下字段为真正的 Unicode:

  • 文件空间名称
  • 高级别
  • 低级别
  • 归档描述

所有其余字段在被发送到服务器之前将被转换为本地代码页。 诸如节点名之类的字段为 wchar 字符串。 它们必须在当前语言环境中有效。 例如,在日语环境的机器上,可使用中文名称备份文件,但是节点名必须是日语中的有效字符串。 选项文件仍在当前代码页中。 如果需要创建 Unicode 包含/排除列表,请将 inclexcl 选项与文件名配合使用,并创建包含 Unicode 模式的 Unicode 文件。