试试调用该函数之前先用lpReturnedString=string(255,0)初始化这个参数,因为lpReturnedString这个参数比较特殊,需要先进行字符串长度的初始化,如果没有的话,初始长度为0,当然就返回的是空值了。

解决方案 »

  1.   

    我是这么做的,但是还是没有数值传到    S = String(1024, 0)
        Length = GetPrivateProfileString("windows", "programs", "", S, Len(S) , App.path + "\option.ini")
        S = Left(S, Length)
      

  2.   

    我写的Ini模块:Attribute VB_Name = "BasIni"
    Option Explicit
    Private Declare Function WritePrivateProfileString _
            Lib "kernel32" Alias "WritePrivateProfileStringA" _
            (ByVal lpApplicationName As String, _
            ByVal lpKeyName As Any, _
            ByVal lpString As Any, _
            ByVal lpFileName As String) As Long
    Public 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 Long
    'FileName:Ini文件
    'PathName:小节名
    'KeyName:值名
    'WriteValue:值
    Public Function WriteIni(FileName As String, _
            PathName As String, _
            KeyName As String, _
            WriteValue As String) As Long
        Dim Rc As Long
        
        Rc = WritePrivateProfileString(PathName, KeyName, WriteValue, FileName)
        
        WriteIni = Rc
        
    End Function'FileName:Ini文件
    'PathName:小节名
    'KeyName:值名
    'BackValue:返回值
    'Default:默认字符
    Public Function ReadIni(FileName As String, _
            PathName As String, _
            KeyName As String, _
            BackValue As String, _
            Optional Default As String = "缺省") As Long
        Dim Rc As Long
        Dim TempNum As String
        Dim TempStr As String
        
        TempStr = String$(255, Chr$(0))
        TempNum = 255
        
        Rc = GetPrivateProfileString(PathName, KeyName, Default, TempStr, TempNum, FileName)
        
        If Rc <> 0 Then
            BackValue = Left$(TempStr, TempNum)
            
        End If
        
        ReadIni = Rc
        
    End Function
      

  3.   

    Function GetINI(Section As String, KeyName As String, Optional Default As String, Optional FN As String) As String
      '从文件中读取INI信息
      Dim Value As String
      Dim ValueLen As Long
      Dim Msg As String
      
      On Error Resume Next
      ValueLen = 4096 + 4
      Value = Space$(ValueLen)
      ValueLen = GetPrivateProfileString(Section, KeyName, Default, Value, ValueLen, FN)
      Value = Trim(Left(Value, ValueLen))
      If Asc(Right(Value, 1)) = 0 Then Value = Left(Value, Len(Value) - 1)
      GetINI = Value
    End Function