有没有人知道使用GetLocaleInfoEx的VB(A / 6)示例?

时间:2009-11-30 18:31:07

标签: c++ winapi vba vb6

我以为我从头文件中挖出了我需要的大部分内容,但是我一直在崩溃 这是我尝试使用的声明,但我不认为这只是声明的问题。我想我实际上错了。

Private Declare Function GetLocaleInfoEx Lib "kernel32" ( _
ByVal lpLocaleName As Long, _
ByVal LCType As Long, _
ByRef lpLCData As Long, _
ByVal cchData As Long _
) As Long

Here是相应的文件 由MarkJ编辑:Oorang希望使用GetLocaleInfoEx,因为MSDN文档说它在Vista上是首选。

1 个答案:

答案 0 :(得分:1)

编辑:我无法测试这个,因为我家里没有Vista,但是Oorang说它有效(在评论中)。

Private Declare Function GetLocaleInfoEx _
Lib "kernel32" ( _ 
  ByVal lpLocaleName As Long, _ 
  ByVal LCType As Long, _ 
  ByVal lpLCData As Long, _ 
  ByVal cchData As Long _ 
  ) As Long 

Const LOCALE_SMONTHNAME1 = 56&
Dim sLocaleName As String 
Dim sRetBuffer As String 
Dim nCharsRet As Long 
sLocaleName = "en-US" & Chr$(0) 
sRetBuffer = Space(256) 
nCharsRet = GetLocaleInfoEx(StrPtr(sLocaleName), _ 
  LOCALE_SMONTHNAME1, StrPtr(sRetBuffer), Len(sRetBuffer)-1)
MsgBox Left$(sRetBuffer, nCharsRet) 

你原来的宣告对我来说是错误的。您需要为返回字符串提供缓冲区(宽字符,也称为UTF-16 Unicode字符串)。您需要将指针传递给lpLCData参数中的缓冲区。因此,您need to declare将该参数设置为ByVal Long并使用StrPtr(string),其中string填充了字符,以便为返回数据腾出空间。