• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Wir haben den Frühjahrsputz beendet, Ihr auch? Welches Foto zu dem Thema hat Euch dann am Besten gefallen? Hier geht es lang zur Abstimmung --> Klick

Visual Basic 2010 - ini API?

Chriis

Dithmarscher Paradiesapfel
Registriert
25.01.10
Beiträge
1.467
Liebe ATer,

ich weiß, dass diese Frage hier eigentlich komplett fehl am Platz ist, da es Windows Programmierung betrifft. Ich glaube aber, dass unter Euch doch der ein oder andere VB unterwegs ist... und ich bin ich keinem wirklichen Windows Entwicklungsforum angemeldet.. ;)

Jetzt aber mal zu meiner Frage:
Ich bin derzeit auf der Suche nach einer API für Visual Basic 2010 mit der ich ini Dateien ganz einfach ansprechen kann.
Kann mir jemand von Euch da vielleicht weiter helfen? Ich finde absolut keine passende API, die anständig mit Visual Basic 2010 funktioniert.

Eine sehr schöne API die ich gefunden habe ich folgende:

http://www.shadoware.de/vb/ini.html

Diese funktioniert aber leider nur in VB 6.0 - und das gibt es ja nicht mehr...

Ich habe schon halb Google durchgelesen (seit nun 3 Stunden) habe nach vielen Testprojekten immer noch keine Lösung gefunden.

Vielleicht kann mir ja jemand von Euch weiterhelfen!

Beste Grüße und einen schönen Sonntag,
Chris
 

Illuminus

Morgenduft
Registriert
25.12.07
Beiträge
171
Hi,
das ist eigentlich nur ein Zugriff auf die kernel32.dll und das ist unabhängig von der Entwicklungsumgebung.
Ob Visual Basic, Visual C(++/#) oder sogar LabVIEW, alle können die Funktionen in der Kernel32.dll nutzen.
Aber welches OS verwendest du eigentlich?
Gibt es eine kernel32.dll in Windows 7, heißt die unter win7/64bit vielleicht kernel64.dll? Kann das leider nicht überprüfen, habe zuhause kein Windows.

Gruß

- Edit -
Noch was gefunden:
http://www.vb-paradise.de/allgemeines/sourcecode-austausch/65869-simples-ini-system/
 

Chriis

Dithmarscher Paradiesapfel
Registriert
25.01.10
Beiträge
1.467
Hi Illuminus,

Die kernel32.dll sollte es geben!
Ich nutze Windows 7 Pro.

Na, das schaut wirklich interessant aus!
Nur funktioniert es bei mir leider nicht...
Ich habe einfach mal einen Button gesetzt und lasse beim Klick darauf folgendes ausführen:

Code:
Public Class Form1


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        INI_WriteValueToFile("Bananen", "Preis", "2 Euro", "C:\Sortiment.ini")
    End Sub
End Class

Das Modul hab ich wie folgt angelegt, wie es auch auf der Seite stand. (Über Rechtsklick auf das Projekt, Hinzufügen -> Modul):

Code:
Option Strict On
Module Ini_System
    Declare Ansi 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 Int32, ByVal lpFileName As String) As Int32
    Declare Ansi Function WritePrivateProfileString Lib "kernel32.dll" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Int32
    Declare Ansi Function GetPrivateProfileSection Lib "kernel32.dll" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Int32, ByVal lpFileName As String) As Int32
    Public Function INI_ReadValueFromFile(ByVal strSection As String, ByVal strKey As String, ByVal strDefault As String, ByVal strFile As String) As String
        Dim strTemp As String = Space(1024), lLength As Integer
        lLength = GetPrivateProfileString(strSection, strKey, strDefault, strTemp, strTemp.Length, strFile)
        Return (strTemp.Substring(0, lLength))
    End Function


    Public Function INI_WriteValueToFile(ByVal strSection As String, ByVal strKey As String, ByVal strValue As String, ByVal strFile As String) As Boolean
        Return (Not (WritePrivateProfileString(strSection, strKey, strValue, strFile) = 0))
    End Function
    Public Function INI_ReadSection(ByVal strSection As String, ByVal strPfad As String) As String()
        Dim Buffersize As Integer = 2048
        Dim strWert As String = Space(Buffersize)
        Dim _working As Boolean
        Dim _i As Int32
        Dim _char As Char
        Dim _strg As String
        Dim _x As Integer
        Dim Result(1) As String
        _i = Buffersize
        GetPrivateProfileSection(strSection, strWert, _i, strPfad)
        _i = 0
        _x = 0
        While (_i < Buffersize)
            If (Asc(strWert(_i)) = 0) Then
                _x = _x + 1
            End If
            _i = _i + 1
        End While
        ReDim Result(_x - 1)
        _working = True
        _i = 0
        _x = 0
        _strg = ""
        While _working
            _char = strWert(_i)
            _i = _i + 1
            If (_i < strWert.Length) Then
                _strg = _strg + _char


                If (Asc(_char) = 0) Then
                    If ((_strg.Length = 0) Or
                        (_strg.Length = 1)) Then
                        _working = False
                    Else
                        Result(_x) = _strg
                        _x = _x + 1
                    End If
                    _strg = ""
                End If
            Else
                _working = False
            End If
        End While
        Return Result
    End Function
End Module

Es wird auch keine ini-Datei angelegt - hab das zum Test auch mal gemacht, aber da wird auch nichts hineingeschrieben bei einem Buttonklick.

Oder mach ich da noch irgendetwas falsch?
 

Chriis

Dithmarscher Paradiesapfel
Registriert
25.01.10
Beiträge
1.467
Der gibt keine Fehler aus...
 

Chriis

Dithmarscher Paradiesapfel
Registriert
25.01.10
Beiträge
1.467
Ich hab´s!
Ich werde gleich mal die Lösung posten!

Troßtzdem Danke für deine nette Hilfe, Illuminus!