[VB] Waarde uitlezen ini file lukt niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • dhs
  • Registratie: Januari 2010
  • Laatst online: 22-10-2024
Ik probeer een INI file uit te lezen met Visual Basic maar de kernel32 functie die ik daarvoor wil gebruiken geeft geen resultaat terug. De INI file staat op de plek waar de applicatie zelf ook staat. Ik heb al gecontroleerd of het pad klopt, maar daar zit de fout niet.

Ik vermoed dat er nog iets moet gebeuren met de lpReturnedString maar ik weet niet wat, ook op de website van msdn wordt me niet echt duidelijker wat er nou precies moet gebeuren. Er staat wel dat lpReturnedString "A pointer to the buffer that receives the retrieved string." is, maar hoe lees ik deze buffer dan uit?

Dit is mijn code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public Class Form1

    Dim lpSectionName, lpKeyName, lpValue, lpFilename, lpReturnedString As String

    Public Declare Function GetPrivateProfileString Lib "kernel32" _
   Alias "GetPrivateProfileStringA" _
  (ByVal lpSectionName 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 Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
        lpFilename = System.AppDomain.CurrentDomain.BaseDirectory & "inifile.ini"

        GetPrivateProfileString("database", "server", "ujkl", lpReturnedString, 50, lpFilename)

        TextBox1.Text = lpReturnedString
    End Sub
End Class

Acties:
  • 0 Henk 'm!

  • CodeIT
  • Registratie: Juni 2002
  • Laatst online: 11-10 07:59

CodeIT

Code IT

Weet je zeker dat in lpFilename het goed path staat naar je ini?
Voor het lezen van ini dmv de Windows Api kun je hier een volledig codevoorbeeld vinden: http://www.codeguru.com/f...e/index.php/t-189920.html

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Het probleem is dat je die buffer eerst van een bepaalde grootte moet laten zijn, zodat er ook wat in kan. In dat voorbeeld hierboven gebruiken ze space(1024). Het uitlezen is niet zo moeilijk, gewoon de variabele gebruiken. :p Maar waarom zou je dit niet gewoon managed oplossen? En waarom zou je eigenlijk niet gewoon de standaard configuratiebestanden met XML gebruiken?

Ik heb hier wel eens laten zien dat een parser voor een ini-bestand niet heel lang hoeft te zijn, dus dat lijkt me een betere oplossing dan dit. :) Voor de gelegenheid haal ik hem wel even door de vertaler:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    Public Function ReadIni(ByVal file As String) _
        As Dictionary(Of String, Dictionary(Of String, String))

        Dim sections As New Dictionary(Of String, Dictionary(Of String, String))
        Dim keys As New Dictionary(Of String, String)

        For Each line As String In IO.File.ReadAllLines(file)
            If (line(0) = "[") AndAlso (line(line.Length - 1) = "]") Then
                keys = New Dictionary(Of String, String)
                sections.Add(line.Substring(1, (line.Length - 2)), keys)
            Else
                Dim isPosition As Integer = line.IndexOf("=")
                If (line(0) <> ";") AndAlso (isPosition >= 0) Then
                    keys.Add(line.Substring(0, isPosition), _
                        line.Substring((isPosition + 1)))
                End If
            End If
        Next

        Return sections
    End Function

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • dhs
  • Registratie: Januari 2010
  • Laatst online: 22-10-2024
Bedankt voor die ini parser, ik zal hem eens proberen.

De variabele lpReturnedString vullen met spaties m.b.v. "Space(1024)" helpt overigens niet, ik krijg nog steeds een lege variabele terug. Als je nog meer tips hebt?

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
dhs schreef op dinsdag 30 maart 2010 @ 14:31:
De variabele lpReturnedString vullen met spaties m.b.v. "Space(1024)" helpt overigens niet, ik krijg nog steeds een lege variabele terug. Als je nog meer tips hebt?
Vaag dan, want ik krijg een variabele terug die gewoon gezet is als ik het test, welliswaar aangevuld met een overvloed aan spaties (functie returned juiste lengte). :) Staat bijvoorbeeld het bestand nog gelocked, of klopt het Path niet (gebruik trouwens Path.Combine)? Heb je wel de juiste permissies? LastDllError en het resultaat gechecked? Overigens is de locatie natuurlijk niet zo goed gekozen, als het bestand ook bewerkbaar moet zijn.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • dhs
  • Registratie: Januari 2010
  • Laatst online: 22-10-2024
Het path klopt, ik heb de inhoud van de lpFilename al gecontroleerd. Ik gebruik geen path combine zoals je ziet, de code die in de topicstart staat is de code die ik gebruik. LastDllError geeft overigens wel een code terug, maar daar kan ik niet zoveel mee "-2147023728". Als ik hier op google krijg ik geen resultaten.

Apart dat het bij jou wel werkt, gebruik jij dezelfde code als ik?
Pagina: 1