Avatar billede tofte Juniormester
06. juli 2002 - 12:01 Der er 7 kommentarer og
1 løsning

Problemer med læsning af INI fil

Jeg har en smule problemer med nedenstående kode.

Jeg ønsker at skrive en værdi i en inifil - det går fint.
Men når jeg så skal læse værdien så får jeg den defaulte værdi i dette tilfælde "tom" i stedet for "værdi" som er gemt i filen.

Hvad er det lige jeg gør galt??

Module Module1
    Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationname As String, ByVal lpKeyName As String, ByVal lsString As String, ByVal lplFilename As String) As Long
    Public 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

    Sub Main()
        Dim test As String
        test = Space(255)
        WritePrivateProfileString("Overskrift", "Emne", "Værdi", "c:\konv.ini")
        GetPrivateProfileString("Overskrift", "Emne", "tom", test, 255, "C:\konv.ini")

        MsgBox(test)
    End Sub

End Module
Avatar billede tjacob Juniormester
06. juli 2002 - 13:04 #1
Jeg har lige klippet din kode direkte, og kørt den. -Fungerer fint hos mig.
Den eneste ændring:

Sub Main()
        Dim test As String, a
        test = Space(255)
        a = WritePrivateProfileString("Overskrift", "Emne", "Værdi", "c:\konv.ini")
        a = GetPrivateProfileString("Overskrift", "Emne", "tom", test, 255, "C:\konv.ini")

        MsgBox(test)
    End Sub

/tjacob
Avatar billede tofte Juniormester
07. juli 2002 - 13:20 #2
Jeg fatter ikke hvorfor det ikke virker ved mig.
Jeg bruger Visual Basic .net. Når jeg kører programmet returnerer den altid tom.

Jeg har prøvet at bruge din lille rettelse, men resultatet er det samme.
Avatar billede tubber Juniormester
07. juli 2002 - 14:35 #3
Kode for at skrive i en ini.....
WritePrivateProfileString("Overskrift", "Emne", "Værdi", "c:\konv.ini")


Kode for at hente:
GetPrivateProfileString("Overskrift", "Emne", "tom", test, 255, "C:\konv.ini")

Men det skal være sådan her:
GetPrivateProfileString("Overskrift", "Emne", test, 255, "C:\konv.ini")

Når du sætter "tom" så replacer du den værdi du henter med strengen "tom".....

når jeg selv har brugt det er det som følger(godt nok i en form):

'Kode i et modul

Public 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

'Declaretion for read from an .ini file

Public 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

'variables for reading and writing .ini files
'They are dimensioned here becaus then the module
'can be freely moved to other programs

Global lngResult As Long
Global strFileName
Global strResult As String * 50

'Kode i form
'Read option setup from .ini file

strFileName = App.Path & "\setup.ini"
lngResult = GetPrivateProfileString("Options", _
"ToTray", strFileName, strResult, Len(strResult), _
strFileName)




bare en umidlbar indskydelse.......
Avatar billede tofte Juniormester
08. juli 2002 - 18:31 #4
Jeg vil starte med at sige, at jeg er nybegynder inden for faget.

Men kan det have noget at sige, at jeg bruger .net versionen. Den vil for eksempel ikke kendes ved ordet global, eller typen Any. Skal man sætte noget specielt op for at få det til at virke.

Hvis jeg gør som tubber foreslog, er den sur over, at felte som jeg har undladt mangler. Jeg har prøvet helt uden feltet samt
GetPrivateProfileString("Overskrift", "Emne",, test, 255, "C:\konv.ini")
Avatar billede tubber Juniormester
08. juli 2002 - 18:55 #5
prøv:
Dim lngResult As Long
Dim strFileName
Dim strResult As String * 50
test = space(255) 'hvad er det egenligt lige det er ?

strFileName = "c:\setup.ini"
lngResult = GetPrivateProfileString("Overskrift", _
"Emne", strFileName, strResult, Len(strResult), _
strFileName)

Eller:

Dim lngResult As Long
Dim strFileName
Dim strResult As String * 50
test = space(255) 'hvad er det egenligt lige det er ?

strFileName = "c:\setup.ini"
lngResult = GetPrivateProfileString("Overskrift", _
"Emne", strFileName, strResult, Len(255), _
strFileName)
Avatar billede tofte Juniormester
08. juli 2002 - 20:15 #6
Jeg kan få det til at virke hvis jeg skriver dette i stedet for. Jeg kan ikke lige helt gennemskue forskellen, men det virker.

Public Declare Function GetPrivateProfileStringA Lib "kernel32.dll" (ByVal inisection As String, ByVal inientry As String, ByVal returndefault As String, ByVal inientrystring As String, ByVal inientrysize As Integer, ByVal inifilename As String) As Integer

Så skal man bare kalde GetPrivateProfileStringA i stedet for.
Avatar billede tubber Juniormester
08. juli 2002 - 23:31 #7
Jammen det er da fint det virker, bare lidt skod man ikke ved hvorfor hehe
Avatar billede tofte Juniormester
11. juli 2002 - 14:53 #8
tak fordi i gad at komme med et bud.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester