Guten Morgen. 
Bastle grad an meinem i rum und habe aus VB6 den Code fürs Lesen von ini-Files übernommen. Musste 2 Variablen ändern, danach sollte Er eigentlich funktionieren. In gewisser Weise tut Er dies auch. Beim dritten Mal bekomm ich jedoch einen Überlauf und weiß nicht wieso. Hier mal die relevanten Code-ausschnitte:
das ist das Modul mit den Funktionen
Dann hier die Loc(alized) Funktion in der die ini-read/write aufgerufen wird.
Und hier der Bereich wo ich die Loc-Funktion mehrmals aufrufe um meine anwendung in mehreren Sprachen zur Verfügung zu stellen
Hierbei gehen die ersten beiden Aufrufe ohne Probleme (habe das schrittweise durchgespielt). Beim dritten Aufruf aber schießt die Variable slength aus dem Modul ins unendliche. Warum weiß ich nicht. Es gibt wie gesagt keinen Ersichtlichten Grund. Ich bekomme lediglich die Fehlermeldung "Die arithmetische Operation hat einen Überlauf verursacht.". Als lösung bietet er mir "Dividieren sie nicht durch 0 an"
Die ini-datei sieht wiefolgt aus:
das haha wird sogar ausgelesen(man sieht den Anfang des Strings im debug). jedoch ist eben das slength viel zu hoch.
Hat irgendwer ne Ahnung warum das so läuft? in vb6 läuft der Code 1A. Musste für vb.net lediglich den typ von lpKeyName von Any auf String stellen und den Typ von nsize von Long auf Integer.
Hat wer ne idee

Bastle grad an meinem i rum und habe aus VB6 den Code fürs Lesen von ini-Files übernommen. Musste 2 Variablen ändern, danach sollte Er eigentlich funktionieren. In gewisser Weise tut Er dies auch. Beim dritten Mal bekomm ich jedoch einen Überlauf und weiß nicht wieso. Hier mal die relevanten Code-ausschnitte:
das ist das Modul mit den Funktionen
Visual Basic:
Module inireadwrite
Private Declare Function WritePrivateProfileString Lib "kernel32.dll" Alias "WritePrivateProfileStringA" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpString As String, _
ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileString Lib "kernel32.dll" 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 Long
Public Sub iniWrite(ByVal Eigenschaft As String, ByVal Kategorie As String, ByVal Wert As String, ByVal Pathname As String) 'schreiben in ini
Dim retval As Long
retval = WritePrivateProfileString(Kategorie, Eigenschaft, Wert, Pathname)
End Sub
Public Function iniRead(ByVal Eigenschaft As String, ByVal Kategorie As String, ByVal Pathname As String) As String 'lesen aus ini
Dim defaultstr As String ' going to receive the value read from the INI file
Dim slength As Long ' going to receive length of the returned string
defaultstr = Space(255) ' provide enough room for the function to put the value into the buffer
slength = GetPrivateProfileString(Kategorie, Eigenschaft, "Error applied reading INI-File", defaultstr, Len(defaultstr), Pathname)
defaultstr = Mid(defaultstr, 1, slength)
iniRead = defaultstr
End Function
End Module
Dann hier die Loc(alized) Funktion in der die ini-read/write aufgerufen wird.
Visual Basic:
Public Function loca(ByVal strick As String) As String
loca = iniRead(strick, "Loc", Application.StartupPath & "\game\Lang.ini")
End Function
Und hier der Bereich wo ich die Loc-Funktion mehrmals aufrufe um meine anwendung in mehreren Sprachen zur Verfügung zu stellen
Visual Basic:
Private Sub frmSub_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.BackgroundImage = New Bitmap(Application.StartupPath & "\game\images\backgrounds\login.bmp")
Label1.Text = loca("Benutzername")
Label2.Text = loca("Passwort")
CheckBox1.Text = loca("loginmerk")
cmd_login.Text = loca("loginbtn")
'.......usw.usw....
Hierbei gehen die ersten beiden Aufrufe ohne Probleme (habe das schrittweise durchgespielt). Beim dritten Aufruf aber schießt die Variable slength aus dem Modul ins unendliche. Warum weiß ich nicht. Es gibt wie gesagt keinen Ersichtlichten Grund. Ich bekomme lediglich die Fehlermeldung "Die arithmetische Operation hat einen Überlauf verursacht.". Als lösung bietet er mir "Dividieren sie nicht durch 0 an"
Die ini-datei sieht wiefolgt aus:
Code:
[loc]
Benutzername=Benutzername:
Passwort=Passwort:
loginmerk=haha
regbtn=Registrieren
loginbtn=Login
usw....usw...
das haha wird sogar ausgelesen(man sieht den Anfang des Strings im debug). jedoch ist eben das slength viel zu hoch.
Hat irgendwer ne Ahnung warum das so läuft? in vb6 läuft der Code 1A. Musste für vb.net lediglich den typ von lpKeyName von Any auf String stellen und den Typ von nsize von Long auf Integer.
Hat wer ne idee

Zuletzt bearbeitet: