Кто-нибудь знает пример VB (A / 6) с использованием GetLocaleInfoEx? - PullRequest
0 голосов
/ 30 ноября 2009

Я думал, что выкопал большую часть того, что мне нужно, из заголовочных файлов, но я продолжаю вылетать.
Вот объявление, которое я пытался использовать, но я не думаю, что это просто проблема объявления. Я думаю, что на самом деле я использую это неправильно.

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

Здесь - соответствующая документация.
EDIT от MarkJ : Oorang хочет использовать GetLocaleInfoEx, потому что в документах MSDN говорится, что это предпочтительнее в Vista.

1 Ответ

1 голос
/ 01 декабря 2009

РЕДАКТИРОВАТЬ: Я не мог проверить это, потому что у меня дома нет 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 заполнено символами, чтобы освободить место для возвращаемых данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...