Listbox mit Daten aus ini Datei füllen

forsterm

Erfahrenes Mitglied
Hallo,
ich habe eine ini Datei die wie folgend aufgebaut ist:
Code:
[Empfaenger]
count=4
0=Zeile1
1=Zeile2
2=Zeile3
3=Zeile4

Nun habe ich am Anfang meines Codes folgendes deklariert:
Code:
Private Dateiname AsString
 
PrivateDeclareUnicodeFunction WritePrivateProfileString _
Lib "Kernel32" Alias "WritePrivateProfileStringW" ( _
ByVal sApplication AsString, _
ByVal sKey AsString, _
ByVal sValue AsString, _
ByVal sIniName AsString) As Int32
 
PrivateDeclareUnicodeFunction GetPrivateProfileInt _
Lib "Kernel32" Alias "GetPrivateProfileIntW" ( _
ByVal sApplication AsString, _
ByVal sKey AsString, _
ByVal iDefault AsInteger, _
ByVal sIniName AsString) As Int32
 

PrivateDeclareUnicodeFunction GetPrivateProfileString _
Lib "Kernel32" Alias "GetPrivateProfileStringW" ( _
ByVal sApplication AsString, _
ByVal sKey AsString, _
ByVal sDefault AsString, _
ByVal sReturn AsString, _
ByVal iReturnSize As Int32, _
ByVal sIniName AsString) As Int32

So, nun möchte ich die Daten die in der ini Datei stehen in die Listbox einlesen.
Dazu wollte ich wie folgend vorgehen:
Code:
Dateiname = Application.StartupPath & "\iniDateien.ini"
Dim i As Short
For i = 0 To GetPrivateProfileInt("Empfaenger", "count", 0, Dateiname) - 1
  Me.ListBox1.Items.Add(GetPrivateProfileString("Empfaenger", i, 0, Dateiname))
Next

Leider funktioniert das so jedoch nicht. Weiß jemand, mein Fehler ist?

mfg
forsterm
 
Zuletzt bearbeitet:
Hi,

Ich hab leider keine Antwort auf dein eigentliches Problem, aber wieso machst du die ganze Angelegenheit nicht mit der StreamReader-Klasse? Damit könntest du dir die ganze Deklaration von irgendwelchen Kernel32-Funktionen sparen.
 
Hallo,
leider kenn ich die StreamReader-Klasse nicht (bin noch neu in vb.net). Hast du da eventuell ein Beispiel bzw. einen Link?

mfg
forsterm
 
Hallo,
bekomme folgende Fehler:
Code:
Für den Parameter "iReturnSize" von "Declare Unicode Function GetPrivateProfileString Lib "Kernel32" Alias "GetPrivateProfileStringW" (sApplication As String, sKey As String, sDefault As String, sReturn As String, iReturnSize As Integer, sIniName As String) As Integer" wurde kein Argument angegeben.
 
Für den Parameter "sIniName" von "Declare Unicode Function GetPrivateProfileString Lib "Kernel32" Alias "GetPrivateProfileStringW" (sApplication As String, sKey As String, sDefault As String, sReturn As String, iReturnSize As Integer, sIniName As String) As Integer" wurde kein Argument angegeben.

mfg
forsterm
 
Norbert Eder hat gesagt.:
GetPrivateProfileString erfordert auch 6 Parameter und nicht 4 wie du sie übergibst.

Hallo,
ja das habe ich auch gemerkt, nur leider weiß ich nicht was ich für sReturn und iReturnSize angeben muss.

mfg
forsterm
 
Deklaration der Interop-Methode:

Code:
[DllImport("KERNEL32.DLL", EntryPoint="GetPrivateProfileStringA", CharSet=CharSet.Ansi)]
private static extern int GetPrivateProfileString (string lpApplicationName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);

Methode zum lesen:
Code:
public const int MAX_ENTRY = 32768;
public string ReadString(string section, string key) 
{
	StringBuilder sb = new StringBuilder(MAX_ENTRY);
	GetPrivateProfileString(section, key, string.Empty, sb, MAX_ENTRY, Filename);
	return sb.ToString();
}

Gruss Alexander
 
Ach huch, hab deinen ersten Post gar nicht gelesen.

Mit den INI-Funktionen aus dem kernel kannst du das was du versuchst nicht erreichen. Du könntest dir zwar alle Sections ([dieseDinger]) abgfragen, aber alle Werte innerhalb einer Section nicht.

Du musst dir wohl oder übel eine eigene Parser-Klasse schreiben. Ist ja wirklich nichts aufwändiges.

Gruss Alexander
 
Zurück