我以为我从头文件中挖出了我需要的大部分内容,但是我一直在崩溃
这是我尝试使用的声明,但我不认为这只是声明的问题。我想我实际上错了。
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上是首选。
答案 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
填充了字符,以便为返回数据腾出空间。