小弟使用GetPrivateProfileString读取ini文件当其中必须给定返回字符串的长度,我设为256,并用dim a as string * 256接受,但是其实ini文件中的字符串并没有256个,而不管是不是使用trim()。这个字符串的len()都是256即使把他付给别的字符串也不行。十分郁闷。我想得到纯的字符,并把ini中的两个key值相加。

解决方案 »

  1.   

    GetPrivateProfileString 的放回值指出了读取到的字符串字节长度,不返回中文,简单的是:
    nRet = GetPrivateProfileString(.....)
    retStr = left(strBuff, nRet)
    如果返回字符串中有中文,应该做个变换,怎么变忘记了,自己摸索一下吧。
      

  2.   

    Dim Ret As String, NC As Long
    Ret = String(255, 0)
    NC = GetPrivateProfileString("Tip", "TimeStamp", vbNullString, Ret, 255, "C:\xdict.ini")
    If NC <> 0 Then Ret = Left$(Ret, NC)
    MsgBox Ret & vbCrLf & CStr(Len(Ret))
      

  3.   

    Dim ret As Long
        Dim buff As String
        Dim STR As String
        
        buff = String(255, vbNullChar)
        ret = GetPrivateProfileString("COMM", "com", "0", buff, 255, App.Path & "\ini\DMA_Analyse1.ini")
        STR = Left(buff, InStr(buff, vbNullChar) - 1)
      

  4.   

    Public Function ReadFromIni(ByVal FileName As String, ByVal Section As String, ByVal Key As String) As String
        Dim i As Long
        Dim buff As String * 128
        GetPrivateProfileString Section, Key, "", buff, 128, FileName
        i = InStr(buff, Chr(0))
        ReadFromIni = Trim(Left(buff, i - 1))
    End Function
    Public Sub LoadParameter()
       label1.caption = Trim(ReadFromIni(App.Path & "\test.ini", "General", "UserName"))
    End Sub 這樣的問題我在改寫一個控件也曾遇見過﹐Trim沒有辦法去空格。
    其實有個特殊的地方﹐把就是label控件﹐它自身有去空格的作用。
    先把取得的值傳給label1.caption﹐然后讓text1.text=label1.caption
    然后你用len(text1.text)再看看長度就不是256了。其實label的用處不只去空格﹐在變量傳遞過程中有很強的作用。
      

  5.   

    老兄:不必多说,送你个操作INI文件的类,我程序中所有对INI的操作都是用的这个类。
    '******************************************************Option ExplicitPublic Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As LongPublic Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As LongPublic Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As LongPublic Function GetIniS(ByVal SectionName As String, ByVal KeyWord As String, ByVal DefString As String) As String
        Dim ResultString As String * 144, Temp As Integer
        Dim s As String, i As Integer
        '检索关键词的值
        Temp% = GetPrivateProfileString(SectionName, KeyWord, "", ResultString, 144, AppProfileName())
        '检验关键词是否为空
        If Temp% > 0 Then
            s = ""
            For i = 1 To 144
                If Asc(Mid(ResultString, i, 1)) = 0 Then
                    Exit For
                Else
                    s = s & Mid(ResultString, i, 1)
                End If
            Next i
        Else
            '将缺省值写入INI文件
            Temp% = WritePrivateProfileString(SectionName, KeyWord, DefString, AppProfileName())
            s = DefString
        End If
        GetIniS = s
    End FunctionPublic Function GetIniN(ByVal SectionName As String, ByVal KeyWord As String, ByVal DefValue As Integer) As Integer
        Dim d As Long, s As String
        d = DefValue
        GetIniN = GetPrivateProfileInt(SectionName, KeyWord, DefValue, AppProfileName())
        If d <> DefValue Then
            s = ""
            d = WritePrivateProfileString(SectionName, KeyWord, s, AppProfileName())
        End If
    End FunctionPublic Sub SetIniN(ByVal SectionName As String, ByVal KeyWord As String, ByVal ValInt As Integer)
        Dim res%
        Dim s$
        s$ = Str$(ValInt)
        res% = WritePrivateProfileString(SectionName, KeyWord, s$, AppProfileName())
    End SubPublic Sub SetIniS(ByVal SectionName As String, ByVal KeyWord As String, ByVal ValStr As String)
        Dim res%
        res% = WritePrivateProfileString(SectionName, KeyWord, ValStr, AppProfileName())
    End SubPublic Function AppProfileName() As String
        AppProfileName = App.Path & "\yzmisinitial.ini"
    End Function
        
    Public Function GetAutoID_PWD() As String
        Randomize
        GetAutoID_PWD = "ZQY" & Int((999 - 100 + 1) * Rnd + 100)
    End Function
      

  6.   

    各位老大,我在EXCEL中不论怎么读都是空的字符串阿
      

  7.   


    你忘记写入这句
    Left(buff, n) 这样除了字符串本身,后面还有N个空格.你应该这样写
    Dim buff As String * 255,n As Long
    n = GetPrivateProfileString("*****", "*****", "NONE", buff, 256, App.Path & "\****.ini")
    Str=Left(buff, n) 'Str既是想要得到的值
      

  8.   

    就是就是,GetPrivateProfileString的返回值是所读字符串的长度