2009-11-30 34 views
0

我以爲我從頭文件中挖出了大部分需要的內容,但是我一直在崩潰。
這是我嘗試使用的聲明,但我不認爲這只是聲明的問題。我想我實際上是在錯誤地使用它。
有誰知道使用GetLocaleInfoEx的VB(A/6)示例?

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

你使用Vista嗎? – 2009-11-30 20:44:16

+0

可能的錯誤是語言環境名稱。你的聲明看起來像什麼? – 2009-11-30 20:46:56

+1

恭喜,您是「LocaleInfoEx」的唯一一款Google熱播。這的確可以解釋崩潰。 – 2009-12-01 02:48:03

回答

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已經填充了字符來爲返回數據騰出空間。

+0

在Vista中運行。謝謝:) – Oorang 2009-12-02 03:57:16