getStringTypeExW 函数 (stringapiset.h)

检索指定源字符串中字符的字符类型信息。 对于字符串中的每个字符,函数在输出数组的相应 16 位元素中设置一个或多个位。 每个位标识给定的字符类型,例如字母、数字或两者均不。

谨慎 错误地使用 GetStringTypeEx 函数可能会危及应用程序的安全性。 若要避免缓冲区溢出,应用程序必须正确设置输出缓冲区大小。 有关更多安全信息,请参阅 安全注意事项:Windows 用户界面
 
注意 与其近亲 GetStringTypeAGetStringTypeW 不同,此函数通过使用 #define UNICODE 开关表现出适当的 ANSI 或 Unicode 行为。 这是建议用于字符类型检索的函数。
 

语法

BOOL GetStringTypeExW(
  [in]  LCID                          Locale,
  [in]  DWORD                         dwInfoType,
  [in]  _In_NLS_string_(cchSrc)LPCWCH lpSrcStr,
  [in]  int                           cchSrc,
  [out] LPWORD                        lpCharType
);

参数

[in] Locale

指定区域设置的区域设置标识符。 此值唯一定义 ANSI 代码页。 可以使用 MAKELCID 宏创建区域设置标识符,也可以使用以下预定义值之一。

Windows Vista 及更高版本: 还支持以下自定义区域设置标识符。

[in] dwInfoType

指定要检索的字符类型信息的标志。 有关可能的标志值,请参阅 GetStringTypeWdwInfoType 参数。 有关字符类型位的详细信息,请参阅 GetStringTypeW 的备注。

[in] lpSrcStr

指向要检索其字符类型的字符串的指针。 如果 cchSrc 设置为任何负值,则假定字符串以 null 结尾。

[in] cchSrc

lpSrcStr 指示的字符串的大小(以字符为单位)。 大小是指函数的 ANSI 版本的字节或 Unicode 版本的宽字符。 如果大小包含终止 null 字符,则该函数将检索该字符的字符类型信息。 如果应用程序将大小设置为任何负整数,则假定源字符串以 null 结尾,并且函数使用 null 终止的附加字符自动计算大小。

[out] lpCharType

指向 16 位值的数组的指针。 此数组的长度必须足够大,才能接收源字符串中每个字符的 16 位值。 如果 cchSrc 不是负数, 则 lpCharType 应该是包含 cchSrc 元素的单词数组。 如果 cchSrc 设置为负数, 则 lpCharType 是包含 lpSrcStr + 1 元素的单词数组。 函数返回时,此数组包含一个对应于源字符串中每个字符的单词。

返回值

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

  • ERROR_INVALID_FLAGS。 为标志提供的值无效。
  • ERROR_INVALID_PARAMETER。 任何参数值都无效。

注解

有关使用字符串函数的概述,请参阅 字符串

使用提供的区域设置的 ANSI 代码页,此函数将源字符串从 ANSI 转换为 Unicode。 然后,它会分析每个 Unicode 字符的字符类型信息。

此函数的 ANSI 版本将源字符串转换为 Unicode 并调用相应的 GetStringTypeW 函数。 因此,输出缓冲区中的单词不对应于原始 ANSI 字符串,而是对应于其 Unicode 等效项。 从 ANSI 到 Unicode 的转换可能会导致字符串长度发生更改,例如,一对 ANSI 字符可以映射到单个 Unicode 字符。 因此,输出缓冲区中的单词与原始 ANSI 字符串中的字符之间的对应关系并非在所有情况下都是一对一的,例如多字节字符串。 因此,此函数的 ANSI 版本对多字符字符串的使用有限。 建议改用函数的 Unicode 版本。

此函数可规避由 GetStringTypeAGetStringTypeW 之间的参数差异引起的限制。 由于参数差异,应用程序无法使用 #define UNICODE 开关自动调用 GetStringType* 函数的正确 ANSI 或 Unicode 版本。 另一方面, GetStringTypeEx 针对该开关的行为正确。 因此,这是建议的函数。

当此函数的 ANSI 版本与仅限 Unicode 的区域设置标识符一起使用时,该函数可能会成功,因为操作系统使用系统代码页。 但是,在系统代码页中未定义的字符在字符串中显示为问号 (?) 。

lpSrcStrlpCharType 参数的值不能相同。 如果它们相同,函数将失败并 ERROR_INVALID_PARAMETER

Locale 参数仅用于执行到 Unicode 的字符串转换。 它与应用程序提供的 CTYPE* 值无关。 这些值完全由 Unicode 码位决定,不会因区域设置而变化。 例如,将希腊文字母指定为区域设置的任何值的C1_ALPHA。

要求

   
最低受支持的客户端 Windows 2000 专业版 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows 2000 Server [桌面应用 |UWP 应用]
目标平台 Windows
标头 stringapiset.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

GetStringTypeW

国家语言支持

国家语言支持函数