Public Class Form1
    Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyname As String, ByVal lpstring As String, ByVal lpfilename As String) As Long
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Dim a As Long
        WritePrivateProfileString("aa", "y", TextBox1.Text, "c:\ss.ini")
    End Sub
    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 Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim b As Long
        Dim kk As String
        kk = Space(256)
        b = GetPrivateProfileString("aa", "y", "空", kk, kk.Length, "c:\ss.ini")
        'TextBox2.Text = y
        If (b = 1 Or kk = "空") Then MsgBox("无法读取") _
        Else _
        MsgBox(kk)    End Sub
End Class
这个程序为何读取不了KK的值,老是显示“空”字,读取失败选取默认值“空”,但怎么让他读取成功啊。

解决方案 »

  1.   

    这样声名两个API就OK:    Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyname As String, ByVal lpstring As String, ByVal lpfilename As String) As Integer
     
        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 Integer, ByVal lpfilename As String) As Integer
      

  2.   

    把我的那两个声名复制,替换掉你的两个声名,你的KK就有值了,这是因为,原来的API中的LONG与现在VB.NET下的INTEGER是一样的,而不是与VB.NET下的LONG是一样的,明白了吗???
    Public Class Form1
    Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyname As String, ByVal lpstring As String, ByVal lpfilename As String) As Integer
     
        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 Integer, ByVal lpfilename As String) As IntegerPrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
            'Dim a As Long 
            WritePrivateProfileString("aa", "y", TextBox1.Text, "c:\ss.ini") 
        End Sub 
            Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
            Dim b As Long 
            Dim kk As String 
            kk = Space(256) 
            b = GetPrivateProfileString("aa", "y", "空", kk, kk.Length, "c:\ss.ini") 
            'TextBox2.Text = y 
            If (b = 1 Or kk = "空") Then MsgBox("无法读取") _ 
            Else _ 
            MsgBox(kk)     End Sub 
    End Class 
      

  3.   

    阿哥,好人就帮到底。那现在的这个VB2008的long是与以前的API中哪个对应?
    我现在用的是VB2008,不是vb.net啊。难道现在的vb都靠近vb.net的编程方法开发了?
      

  4.   

    换了VB6.0,API函数能读取了,但对VS2008不死心,有谁用过VS2008,试一下,看一下是什么原因啊。一直取不取值!~
      

  5.   

    你用火星版的VS2008(不属于.NET类)当然不行,而我用微软的VS2008(属于.NET类)当然就可以,我8楼回的就行.在我这以下代码也行,劝你换成微软的VS2008,然后复制以下代码试试(别说你连复制都不会)Public Class Form1
        Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyname As String, ByVal lpstring As String, ByVal lpfilename As String) As Integer    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 Integer, ByVal lpfilename As String) As Integer    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim b As Long
            Dim kk As String
            kk = Space(256)
            b = GetPrivateProfileString("aa", "y", "空", kk, kk.Length, "c:\ss.ini")
            'TextBox2.Text = y 
            If (b = 1 Or kk = "空") Then MsgBox("无法读取") _
            Else _
            MsgBox(kk)    End Sub    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            WritePrivateProfileString("aa", "y", 55, "c:\ss.ini")    End Sub
    End Class