РЕДАКТИРОВАТЬ: Я не мог проверить это, потому что у меня дома нет 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)
Ваш оригинальный Объявление выглядело неправильно для меня. Вы должны предоставить буфер для возвращаемой строки (широкие символы, иначе известные как строка Unicode UTF-16). Вам нужно передать указатель на буфер в аргументе lpLCData
. Таким образом, вам необходимо объявить этот аргумент как ByVal Long
и использовать StrPtr(string)
, где string
заполнено символами, чтобы освободить место для возвращаемых данных.