鱼C论坛

 找回密码
 立即注册
查看: 3115|回复: 0

[API档案] GetLocaleInfo

[复制链接]
发表于 2016-5-11 17:00:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
注:本文档由 Diu 翻译,小甲鱼校对。

原文链接 -> 传送门

函数功能:

GetLocaleInfo 函数用于获取标识符指定的区域设置相关信息。

注意:为了互通性,应用程序应该更倾向于使用 GetLocaleInfoEx 函数而不是 GetLocaleInfo,因为对于新的区域,微软逐渐向使用区域的名字来代替区域标识符。任何在  Windows Vista 和之后版本的应用程序都应该使用 GetLocaleInfoEx 函数。


API 函数原型:

注释:_In_ 说明该参数是输入的。
  1. int GetLocaleInfo(
  2.   _In_      LCID   Locale,
  3.   _In_      LCTYPE LCType,
  4.   _Out_opt_ LPTSTR lpLCData,
  5.   _In_      int    cchData
  6. );
复制代码


参数解析:

参数 含义
Locale获取信息所使用的区域标识符。你可以使用 MAKELCID 宏来创建一个区域标识符或者使用下列预定义值中的某一个:
  • LOCALE_CUSTOM_DEFAULT
  • LOCALE_CUSTOM_UI_DEFAULT
  • LOCALE_CUSTOM_UNSPECIFIED
  • LOCALE_INVARIANT
  • LOCALE_SYSTEM_DEFAULT
  • LOCALE_USER_DEFAULT
LCType需要获取的区域相关信息。详细信息,请参看 GetLocaleInfoEx 函数的 LCType 参数
注意:对于 GetLocaleInfo 函数,值 LOCALE_USE_CP_ACP 仅适用于 ANSI 版本
lpLCData1. 指向一个缓冲区的指针,该缓冲区在函数中用来获取所需的区域信息
2. 如果 cchData 设置为 0,则不使用该指针。更多信息,请参看备注部分
cchData1. 指定 lpLCData 参数指示的数据缓冲区的大小,以 TCHAR 为单位
2. 另外,应用程序可以设置该参数为 0,在这种情况下,函数将不会使用 lpLCData 参数,并且返回所需的缓冲区大小,包括终止空字符


返回值:

1. 如果函数调用成功,并且 cchData 为非 0 值,则返回获取的区域数据缓冲区中字符的个数。如果函数调用成功,cchData 为非 0 值,并且指定了 LOCALE_RETURN_NUMBER,则返回值为获取的数据缓冲区中整形数据的大小(也就是说,对于该函数的 Unicode 版本,返回 2,对于该函数的 ANSI 版本,返回 4);如果函数调用成功,并且 cchData 的值为 0,则返回值为以字符为单位,获取的区域数据缓冲区的大小。

2. 如果函数调用失败,则返回 0。

获取有关错误的更多信息,请调用 GetLastError 函数,该函数将返回下列的错误代码:

错误码 含义
ERROR_INSUFFICIENT_BUFFER提供的缓冲区大小不够大,或者是错误地设置为 NULL
ERROR_INVALID_FLAGS提供的标识符无效
ERROR_INVALID_PARAMETER任何一个参数无效


备注:

1. 此函数的操作,见 GetLocaleInfoEx 函数备注部分。

注意:即使 LCType 参数被指定为 LOCALE_FONTSIGNATURE,cchData 和函数返回仍然是 TCHAR 数。对于该函数的 ANSI 和 Unicode 版本,该数不一样。当应用程序调用一般的 GetLocaleInfoEx 版本,并且指定 LOCALE_FONTSIGNATURE,cchData 可以安全地指定为 sizeof(LOCALESIGNATURE) / sizeof(TCHAR)。

2. 下面的例子展示了非文本值缓冲器大小的直接处理:

  1. int   ret;
  2. CALID calid;
  3. DWORD value;

  4. ret = GetLocaleInfo(LOCALE_USER_DEFAULT,
  5.                     LOCALE_ICALENDARTYPE | LOCALE_RETURN_NUMBER,
  6.                     (LPTSTR)&value,
  7.                     sizeof(value) / sizeof(TCHAR) );
  8. calid = value;

  9. LOCALESIGNATURE LocSig;

  10. ret = GetLocaleInfo(LOCALE_USER_DEFAULT,
  11.                     LOCALE_FONTSIGNATURE,
  12.                     (LPWSTR)&LocSig,
  13.                     sizeof(LocSig) / sizeof(TCHAR) );
复制代码

3. 该函数的 ANSI 版获取的 ANSI 字符串是从 Unicode 转换成的 ANSI,根据区域标识符的默认 ANSI 编码页。然而,如果指定了 LOCALE_USE_CP_ACP,则转换是基于系统的默认 ANSI 编码页。

4. 当使用该函数的 ANSI 版,并且使用了只能用 Unicode 表示的区域标识符,函数还是能够调用成功,因为操作系统使用的是系统编码页。然而,字符串中在系统编码页中未定义的字符将显示为问号(?)。


需求:

Minimum supported client Windows 2000 专业版 [仅桌面应用程序]
Minimum supported server Windows 2000 服务器版 [仅桌面应用程序]
Header Winnls.h (包含于 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll
Unicode and ANSI names GetLocaleInfoW(Unicode)和 GetLocaleInfoA(ANSI)


【API档案】版权归鱼C工作室(www.fishc.com)所有,转载请注明来源。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 03:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表