LCMapStringW 函数 (winnls.h)

对于标识符指定的区域设置,请使用指定的转换将一个输入字符串映射到另一个输入字符串,或为输入字符串生成排序键。

注意 出于互操作性原因,应用程序应首选 LCMapStringEx 函数 LCMapString,因为Microsoft正迁移到使用区域设置名称而不是新区域设置的区域设置标识符。 此建议尤其适用于自定义区域设置,包括由Microsoft创建的区域设置。 任何仅在 Windows Vista 及更高版本上运行的应用程序都应使用 LCMapStringEx

 

语法

int LCMapStringW(
  [in]            LCID    Locale,
  [in]            DWORD   dwMapFlags,
  [in]            LPCWSTR lpSrcStr,
  [in]            int     cchSrc,
  [out, optional] LPWSTR  lpDestStr,
  [in]            int     cchDest
);

参数

[in] Locale

指定区域设置的区域设置标识符。 可以使用 MAKELCID 宏创建区域设置标识符或使用以下预定义值之一。

还支持以下自定义区域设置标识符。

[in] dwMapFlags

指定要在字符串映射期间使用的转换类型或要生成的排序键类型的标志。 有关详细定义,请参阅 LCMapStringExdwMapFlags 参数。

[in] lpSrcStr

指向函数映射或用于排序键生成的源字符串的指针。 此字符串的大小不能为 0。

[in] cchSrc

lpSrcStr指示的源字符串的大小(以字符为单位)。 源字符串的大小可以包含终止 null 字符,但不必。 如果包含终止 null 字符,则函数的映射行为不会受到很大影响,因为终止 null 字符被视为不可排序,并且始终映射到自身。

应用程序可以将参数设置为任何负值,以指定源字符串以 null 结尾。 在这种情况下,如果 LCMapString 在其字符串映射模式下使用,则该函数将计算字符串长度本身,并将以 null 终止由 lpDestStr指示的映射字符串。

应用程序无法将此参数设置为 0。

[out, optional] lpDestStr

指向此函数检索映射字符串或排序键的缓冲区的指针。

如果应用程序使用函数生成排序键(LCMAP_SORTKEY):

  • 排序键存储在缓冲区中,并被视为不透明的字节数组。 存储的值可以在任意位置包含嵌入的 0 个字节。
  • 目标字符串可以包含奇数字节数。 LCMAP_BYTEREV标志仅反转偶数字节数。 排序键中的最后一个字节(奇数位置)不会反转。

如果调用方显式请求字符串的子集,则目标字符串不包括终止 null 字符,除非调用方在 cchDest中指定的

如果此函数失败,则目标缓冲区可能包含部分结果或根本没有结果。 在这种情况下,所有结果都应视为无效。

注意

设置LCMAP_UPPERCASE或LCMAP_LOWERCASE时,目标字符串可以使用与源字符串相同的缓冲区。 但是,强烈建议不要这样做,因为某些条件可能会导致返回的事例字符串长度不同。

[in] cchDest

lpDestStr指示的目标字符串的大小(以字符为单位)。 如果应用程序使用函数进行字符串映射,则它提供此参数的字符计数。 如果终止 null 字符的空间包含在 cchSrc中,cchDest 还必须包含终止 null 字符的空间。

如果应用程序使用函数生成排序键,则它提供大小的字节计数。 此字节计数必须包含排序键0x00终止符的空间。

应用程序可以将 cchDest 设置为 0 。 在这种情况下,该函数不使用 lpDestStr 参数,并返回映射字符串或排序键所需的缓冲区大小。

返回值

如果函数在用于字符串映射时成功,它将返回已转换字符串中的字符数(有关详细信息,请参阅 cchSrccchDest)。

如果函数用于字符串映射时成功,它将返回排序键中的字节数。

如果此函数不成功,则返回 0。 若要获取扩展的错误信息,应用程序可以调用 GetLastError,这会返回以下错误代码之一:

  • ERROR_INSUFFICIENT_BUFFER。 提供的缓冲区大小不够大,或者错误地设置为 NULL
  • ERROR_INVALID_FLAGS。 为标志提供的值无效。
  • ERROR_INVALID_PARAMETER。 任何参数值都无效。

如果此函数不成功,则返回 0。 若要获取扩展的错误信息,应用程序可以调用 GetLastError,这会返回以下错误代码之一:

  • ERROR_INSUFFICIENT_BUFFER。 提供的缓冲区大小不够大,或者错误地设置为 NULL
  • ERROR_INVALID_FLAGS。 为标志提供的值无效。
  • ERROR_INVALID_PARAMETER。 任何参数值都无效。

言论

请参阅有关 LCMapStringEx的备注。

LCMapString 的 ANSI 版本 基于与指定区域设置关联的默认 Windows (ANSI) 代码页,将字符串映射到 Unicode 和从 Unicode 中映射。 当此函数的 ANSI 版本与仅 Unicode 区域设置一起使用时,该函数可能会成功,因为操作系统使用CP_ACP值,表示系统默认的 Windows ANSI 代码页。 但是,系统代码页中未定义的字符在字符串中显示为问号(?)。

注意

winnls.h 标头将 LCMapString 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows 2000 Professional [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
目标平台 窗户
标头 winnls.h (包括 Windows.h)
Kernel32.lib
DLL Kernel32.dll

另请参阅

CompareString

FindNLSString

GetNLSVersion

处理应用程序中的排序

LCMapStringEx

国家语言支持

国家语言支持函数