问题在yhm的长度, 字符串的长度. Public Function getini() As String Dim myini As String myini = String(255, 0) Call GetPrivateProfileString("启动", "用户名", "", myini, 255, App.Path & "\my.ini") getini =trim( myini) End Function
你的GetIni()有问题 返回字符的长度仍旧是255,因为你用字符chr(0)填充了myini 给你一个读取INI的例子 Public sIniFile As String 'INI文件名称Private Declare Function WritePrivateProfileString Lib "kernel32" Alias _ "WritePrivateProfileStringA" (ByVal lpApplicationname As String, _ ByVal lpKeyName As Any, ByVal lsString As Any, ByVal lplFileName As String) As Long Private Declare Function GetPrivateProfileString Lib "kernel32" Alias _ "GetPrivateProfileStringA" (ByVal lpApplicationname As String, _ ByVal lpKeyName As String, ByVal lpDefault As String, _ ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long Private Declare Function GetLastError Lib "kernel32" () As Long '窗体总在最前 Declare Function SetWindowPos& Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cX As Long, ByVal cY As Long, ByVal wFlags As Long)Public Function WriteToINI(ByVal lpSection As String, ByVal lpKey As String, ByVal lpValue As String, ByVal lplFileName As String) As Long '本函数用于向初始化文件中写入设置 Dim Result1 As Long Result1 = WritePrivateProfileString(lpSection, lpKey, lpValue, ByVal lplFileName) If Result1 = 0 Then WriteToINI = GetLastError() Else WriteToINI = Result1 End If End FunctionPublic Function ReadFromINI(ByVal lpSection As String, _ ByVal lpKey As String, ByVal lpDefault As String, _ ByVal lpFileName As String) As String '本函数用于从初始化文件中读取设置字符串 Dim ReturnedString As String * 1000 'Dim ReturnedString1 As String Dim Result2 As Long Result2 = GetPrivateProfileString(lpSection, lpKey, lpDefault, _ ReturnedString, Len(ReturnedString), lpFileName) If Result2 = 0 Then ReadFromINI = "" 'GetLastError() Else ReadFromINI = Trim$(Replace(Trim$(ReturnedString), Chr(0), "", 1, -1, vbBinaryCompare)) End If End Function
字符串的长度.
Public Function getini() As String
Dim myini As String
myini = String(255, 0)
Call GetPrivateProfileString("启动", "用户名", "", myini, 255, App.Path & "\my.ini")
getini =trim( myini)
End Function
这样不行,我试过。
当运行至rc1.Filter = "用户名='" & yhm & " '"时,比如yhm为cao,点住yhm,显示"cao,正常情况下是"cao",好像少了半个引号。
返回字符的长度仍旧是255,因为你用字符chr(0)填充了myini
给你一个读取INI的例子
Public sIniFile As String 'INI文件名称Private Declare Function WritePrivateProfileString Lib "kernel32" Alias _
"WritePrivateProfileStringA" (ByVal lpApplicationname As String, _
ByVal lpKeyName As Any, ByVal lsString As Any, ByVal lplFileName As String) As Long
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias _
"GetPrivateProfileStringA" (ByVal lpApplicationname As String, _
ByVal lpKeyName As String, ByVal lpDefault As String, _
ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function GetLastError Lib "kernel32" () As Long
'窗体总在最前
Declare Function SetWindowPos& Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cX As Long, ByVal cY As Long, ByVal wFlags As Long)Public Function WriteToINI(ByVal lpSection As String, ByVal lpKey As String, ByVal lpValue As String, ByVal lplFileName As String) As Long
'本函数用于向初始化文件中写入设置
Dim Result1 As Long
Result1 = WritePrivateProfileString(lpSection, lpKey, lpValue, ByVal lplFileName)
If Result1 = 0 Then
WriteToINI = GetLastError()
Else
WriteToINI = Result1
End If
End FunctionPublic Function ReadFromINI(ByVal lpSection As String, _
ByVal lpKey As String, ByVal lpDefault As String, _
ByVal lpFileName As String) As String
'本函数用于从初始化文件中读取设置字符串
Dim ReturnedString As String * 1000
'Dim ReturnedString1 As String
Dim Result2 As Long
Result2 = GetPrivateProfileString(lpSection, lpKey, lpDefault, _
ReturnedString, Len(ReturnedString), lpFileName)
If Result2 = 0 Then
ReadFromINI = "" 'GetLastError()
Else
ReadFromINI = Trim$(Replace(Trim$(ReturnedString), Chr(0), "", 1, -1, vbBinaryCompare))
End If
End Function
多谢诸位!