getGeoInfoA 函数 (winnls.h)
[GetGeoInfo 可用于“要求”部分中指定的操作系统。 它可能在后续版本中变更或不可用。 请改用 GetGeoInfoEx。
]
检索有关指定地理位置的信息。
语法
int GetGeoInfoA(
[in] GEOID Location,
[in] GEOTYPE GeoType,
[out, optional] LPSTR lpGeoData,
[in] int cchData,
[in] LANGID LangId
);
参数
[in] Location
要获取其信息的地理位置的标识符。 有关详细信息,请参阅 地理位置表。 可以通过调用 EnumSystemGeoID 来获取可用值。
[in] GeoType
要检索的信息的类型。 可能的值由 SYSGEOTYPE 枚举定义。 如果 GeoType 的值GEO_LCID,则函数将检索区域设置标识符。 如果 GeoType 的值GEO_RFC1766,则函数将检索符合 RFC 4646 (Windows Vista) 的字符串名称。 有关详细信息,请参见“备注”部分。
Windowsxp: 当 GeoType 设置为 GEO_LCID 时,检索的字符串为 8 位十六进制值。
Windows Me: 当 GeoType 设置为 GEO_LCID 时,检索到的字符串为十进制值。
[out, optional] lpGeoData
指向此函数检索信息的缓冲区的指针。
[in] cchData
lpGeoData 指示的缓冲区的大小。 大小是函数的 ANSI 版本的字节数,或 Unicode 版本的字数。 如果函数要返回所需的缓冲区大小,则应用程序可以将此参数设置为 0。
[in] LangId
语言的标识符,与 值“位置”一起使用。 应用程序可以将此参数设置为 0,并为 GeoType 指定GEO_RFC1766或GEO_LCID。 此设置会导致函数通过调用 GetUserDefaultLangID 来检索语言标识符。
返回值
返回在输出缓冲区中检索的地理位置信息 (Unicode) ANSI) 或单词 (字节数。 如果 cchData 设置为 0,则函数将返回缓冲区所需的大小。
如果函数不成功,则返回 0。 若要获取扩展错误信息,应用程序可以调用 GetLastError,这会返回以下错误代码之一:
- ERROR_INSUFFICIENT_BUFFER。 提供的缓冲区大小不够大,或者错误地设置为 NULL。
- ERROR_INVALID_PARAMETER。 任何参数值都无效。
注解
如果应用程序为 GeoType 指定GEO_RFC1766,则应为 LangId 指定一个适合指定地理位置标识符的语言标识符。 相应的语言是非特定区域设置的语言,或者是具有对应于指定标识符的区域设置的语言。 生成的字符串符合 RFC 4646 (Windows Vista) ,构成 区域设置名称。
例如,如果将 Location 指定为 美国 0xF4,将 GeoType 指定为 GEO_RFC1766,将 LangId 指定为非特定区域设置英语的0x09或英语 (美国) 的 0x409,则函数在成功返回时检索“en-US”。 事实上, 函数会忽略语言的区域设置特定部分。 因此,如果应用程序将 LangId 指定为英语 (英国) 0x809,则函数还会将“en-US”写入 lpGeoData。
请看另一个示例。 如果将 Location 指定为 美国 0xF4,GeoType 指定为 GEO_RFC1766,LangId 指定为中文0x04,则函数在成功返回时检索“zh-US”。 这不是受支持的区域设置的名称。
如果应用程序为 GeoType 指定GEO_LCID,则函数会将语言标识符视为 LCID) (区域设置标识符。 如果区域设置标识符以某种方式与提供的地理标识符相关联,则它会尝试返回该标识符。
注意
winnls.h 标头将 GetGeoInfo 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | winnls.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |