一般发生这种错误主要是因为程序与控制面板中的本地设置关系太紧,例如日期格式、本地的金融符号等,但是我的程序是采用RC6的算法进行一些字符串的加密,如果加解密的两端,本地设置不一样,解出来的内容就不一致。
呵呵,我的解决办法是限制用户必须是在简体中文的环境中使用,反正都是中国人使用,这样我就偷懒了,采用的如下代码。
'读取本地的语言码
Private Const LOCALE_USER_DEFAULT = &H400
Private Const LOCALE_ILANGUAGE = &H1
Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
'获得本地语言码
Private Function GetLocalLanguageCode() As String
Dim buffer As String * 100
Dim dl As Long
#If Win32 Then
dl = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ILANGUAGE, buffer, 99)
GetLocalLanguageCode = LPSTRToVBString(buffer)
#End If
End Function
'转换字符串
Private Function LPSTRToVBString(ByVal s As String) As String
Dim nullpos As Long
nullpos = InStr(s, Chr(0))
If nullpos > 0 Then
LPSTRToVBString = Left$(s$, nullpos - 1)
Else
LPSTRToVBString = ""
End If
End Function
'应用如下
If GetLocalLanguageCode <> "0804" Then
MsgBox "本地控制面板设置错误,必须将控制面板设置为中文简体.", vbCritical, "提示"
End
End If
Private Const LOCALE_USER_DEFAULT = &H400
Private Const LOCALE_ILANGUAGE = &H1
Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
'获得本地语言码
Private Function GetLocalLanguageCode() As String
Dim buffer As String * 100
Dim dl As Long
#If Win32 Then
dl = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ILANGUAGE, buffer, 99)
GetLocalLanguageCode = LPSTRToVBString(buffer)
#End If
End Function
'转换字符串
Private Function LPSTRToVBString(ByVal s As String) As String
Dim nullpos As Long
nullpos = InStr(s, Chr(0))
If nullpos > 0 Then
LPSTRToVBString = Left$(s$, nullpos - 1)
Else
LPSTRToVBString = ""
End If
End Function
'应用如下
If GetLocalLanguageCode <> "0804" Then
MsgBox "本地控制面板设置错误,必须将控制面板设置为中文简体.", vbCritical, "提示"
End
End If
这样就限制用户在规定的本地设置中进行操作,这个并不是很好的办法,但是够用就行了。