getLocaleInfoA 函数 (winnls.h)

检索有关标识符指定的区域设置的信息。

注意 出于互操作性原因,应用程序应优先使用 GetLocaleInfoEx 函数而不是 GetLocaleInfo ,因为 Microsoft 正在迁移到使用区域设置名称而不是新区域设置的区域设置标识符。 仅在 Windows Vista 及更高版本上运行的任何应用程序都应使用 GetLocaleInfoEx
注意 为了实现全局兼容性,应用程序应首选 Unicode“W”API 窗体,而不是“A”形式。 GetLocaleInfoA 将限制字符数据,并可能导致用户出现损坏的结果,尤其是在全局启用的应用程序中。 对于此 API, 首选 GetLocaleInfoEx ,因为它是 Unicode,还支持新式区域设置名称标准。
 

语法

int GetLocaleInfoA(
  [in]            LCID   Locale,
  [in]            LCTYPE LCType,
  [out, optional] LPSTR  lpLCData,
  [in]            int    cchData
);

参数

[in] Locale

要检索其信息的区域设置标识符。 可以使用 MAKELCID 宏创建区域设置标识符或使用以下预定义值之一。

[in] LCType

要检索的区域设置信息。 有关详细定义,请参阅 GetLocaleInfoExLCType 参数。

注意 对于 GetLocaleInfo,值 LOCALE_USE_CP_ACP 仅与 ANSI 版本相关。
 

[out, optional] lpLCData

指向缓冲区的指针,此函数在其中检索请求的区域设置信息。 如果 cchData 设置为 0,则不使用此指针。 有关详细信息,请参见“备注”部分。

[in] cchData

lpLCData 指示的数据缓冲区的大小(以 TCHAR 值为单位)。 或者,应用程序可以将此参数设置为 0。 在这种情况下,函数不使用 lpLCData 参数,并返回所需的缓冲区大小,包括终止 null 字符。

返回值

如果成功且 cchData 为非零值,则返回在区域设置数据缓冲区中检索到的字符数。 如果函数成功, 则 cchData 为非零值,并且 指定了LOCALE_RETURN_NUMBER ,则返回值为在数据缓冲区中检索到的整数的大小;即,2 表示函数的 Unicode 版本,4 表示 ANSI 版本。 如果函数成功且 cchData 的值为 0,则返回值是区域设置数据缓冲区所需的大小(以字符为单位,包括 null 字符)。

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

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

注解

有关此函数的操作,请参阅 GetLocaleInfoEx 的备注。

注意 即使 将 LCType 参数指定为 LOCALE_FONTSIGNATURE, cchData 和函数返回仍为 TCHAR 计数。 函数的 ANSI 和 Unicode 版本的计数不同。 当应用程序使用 LOCALE_FONTSIGNATURE 调用 GetLocaleInfo 的通用版本时, cchData 可以安全地指定为 size of (LOCALESIGNATURE) / sizeof (TCHAR) 。
 
以下示例正确处理非文本值的缓冲区大小:
int   ret;
CALID calid;
DWORD value;

ret = GetLocaleInfo(LOCALE_USER_DEFAULT,
                    LOCALE_ICALENDARTYPE | LOCALE_RETURN_NUMBER,
                    (LPTSTR)&value,
                    sizeof(value) / sizeof(TCHAR) );
calid = value;

LOCALESIGNATURE LocSig;

ret = GetLocaleInfo(LOCALE_USER_DEFAULT,
                    LOCALE_FONTSIGNATURE,
                    (LPWSTR)&LocSig,
                    sizeof(LocSig) / sizeof(TCHAR) );

此函数的 ANSI 版本检索到的 ANSI 字符串根据区域设置标识符的默认 ANSI 代码页从 Unicode 转换为 ANSI。 但是,如果指定 了LOCALE_USE_CP_ACP ,则转换基于系统默认 ANSI 代码页。

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

注意

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

要求

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

另请参阅

GetLocaleInfoEx

GetSystemDefaultLCID

GetUserDefaultLCID

国家/地区语言支持

国家/地区语言支持函数

检索和设置区域设置信息

SetLocaleInfo