INI Datei lesen

scan5416

Mitglied
Moin zusammen

Probiere jetzt schon seit ein paar Stunden aus einer ini datei zu lesen und es funktioniert einfach nicht!!

Meine Ini Datei sieht folgendermassen aus:
[Allgemein]
Speichern=C:\

Und ich möchte gern den Pfad auslesen.
Damit dies überhaupt funktionieren kann habe ich folgende Funktionen hinzugefügt:
Code:
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
Function GetINISetting(ByVal Filename As String, ByVal Key As String, ByVal Setting As String) As Object
        Dim Temp As String
        Temp = 255
        Call GetPrivateProfileString(Key, Setting, "Nichts gefunden", Temp, Len(Temp), Filename)
        GetINISetting = Mid(Temp, 1, InStr(1, Temp, Chr(0)) - 1)
    End Function
Private Sub setup_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
        'Ini Datei auslesen
        GetINISetting("C:\Datei.ini", "Allgemein", "Speichern")
        MsgBox("Einstellungen geladen", MsgBoxStyle.Information, "")
    End Sub
Wenn ich jetzt das Programm ausführe komm ich folgende Fehlermeldung zurück:
Ein Aufruf an die PInvoke-Funktion "Notenblatt1!Notenblatt.setup::GetPrivateProfileString" hat das Gleichgewicht des Stapels gestört. Wahrscheinlich stimmt die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur überein. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen.

Wo liegt ihr der Fehler?

Vielen Dank für euer schnelle HIlfe!!
 
Hallo Scan,

hier ist der code.

Erstelle ein Modul mit diesem Code drinne

Code:
Option Explicit
'API-Funktionen deklarieren
Private 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
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

Public Function SaveINISetting(ByVal FileName As String, ByVal Key As String, ByVal Setting As String, ByVal Value As String)

   Call WritePrivateProfileString(Key, Setting, Value, FileName)

End Function

Public Function GetINISetting(ByVal FileName As String, ByVal Key As String, ByVal Setting As String, ByVal Default As Variant) As Variant

   Dim TEMP As String * 1024

   Call GetPrivateProfileString(Key, Setting, Default, TEMP, Len(TEMP), FileName)
   GetINISetting = Mid(TEMP, 1, InStr(1, TEMP, Chr(0)) - 1)

End Function
gib dem Modul den Name GetWriteINIFile

dann dies hier dahin wenn es geladen werden soll

Load = GetINISetting(App.Path & "\Settings.ini", "Allgemein", "Speichern", "")


das wars.
 
Hallo

Vielen Dank für deine Antwort

Jetzt habe ich folgende Compiler ausgaben:
1 "As Any" wird in Declare-Anweisungen nicht unterstützt[
2 "As Any" wird in Declare-Anweisungen nicht unterstützt
3 Bezeichner sind nur am Anfang einer Deklaration gültig
4 "end of" Anweisung erwartet
5 Ausdruck erwartet
6 Der Name "TEMP" wurde nicht deklariert
7 Der Name "TEMP" wurde nicht deklariert
8 Der Name "TEMP" wurde nicht deklariert
9 Der Name "TEMP" wurde nicht deklariert

ich habe die Stellen an welchen ein Fehler ausgegeben werde herausgesucht:
1/2
Code:
    Private 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

3
Code:
Public Function GetINISetting(ByVal FileName As String, ByVal Key As String, ByVal Setting As String, ByVal Default As Variant) As Variant

4
Code:
   Dim TEMP As String * 1024

5
Code:
   Call GetPrivateProfileString(Key, Setting, Default, TEMP, Len(TEMP), FileName)

6/7
Code:
   Call GetPrivateProfileString(Key, Setting, Default, TEMP, Len(TEMP), FileName)

8/9
Code:
        GetINISetting = Mid(TEMP, 1, InStr(1, TEMP, Chr(0)) - 1)

Ich hoffe du kannst mir da weiterhelfen...

Vielen Dank
 
@scan5416: Du arbeitest scheinbar mit VB.NET (wahrscheinlich VB2005), steht zwar nicht da aber aufgrund gewisser Codeteile nehm ich das mal an.

Für VB.NET (alles nach VB6) gibts ein eigenes Unterforum, da sich mit .NET die Syntax verändert hat. Da wird wahrscheinlich auch dein Fehler herrühren, API-Aufrufe sind seit .NET etwas anders und du scheinst VB6-Aufrufe benutzt zu haben.

Stell die Frage doch bitte im entsprechenden Unterforum, da wirst du sicher die entsprechende Hilfe bekommen (nein, ich kann den Thread nicht verschieben, das können nur die Admins/Mods).


Der Doc!
 
Zurück