INI-Datei lesen mit Auslagerung in Class einer anderen Datei

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    INI-Datei lesen mit Auslagerung in Class einer anderen Datei

    Moin!

    ich muss aus einer INI-Datei Parameter lesen und habe mir dazu über das Web diese Seite rausgesucht:

    boschert-consulting.com/vb-net…i-speichern-und-auslesen/

    Nun möchte ich die Funktion für das Lesen in eine andere DLL mit zentralen Funktionen auslagern und habe dort diese Klasse angelegt:

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Imports System.Text
    3. Imports Microsoft.VisualBasic
    4. Public Class INI
    5. <DllImport("kernel32", EntryPoint:="GetPrivateProfileString")>
    6. Shared Function Lesen( _
    7. ByVal Sektion As String, ByVal Key As String, ByVal StandartVal As String, _
    8. ByVal Result As StringBuilder, ByVal Size As Int32, ByVal Dateiname As String) As Int32
    9. End Function
    10. Public Sub jan()
    11. MsgBox("bei jan")
    12. End Sub
    13. End Class


    Wenn ich diese Klasse in ein anderes Projekt einbinde wie folgt:

    VB.NET-Quellcode

    1. Dim ServIni As New EBL.Service.INI


    Dann wird mit nach der Eingabe von ServIni die Testfunktion JAN angeboten - nicht aber LESEN

    Kann mir einer von Euch weiterhelfen ?

    Gruß Jan
    @jan99 Machst Du

    VB.NET-Quellcode

    1. Public Shared Lesen(...)

    Besser wäre es, Du machst eine Nicht-Sgared-Klasse und übergibst bei der Instanziierung den Dateiname mit.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Mit anderen Worten: Für die Funktion Jan hast du eine Sichtbarkeit angegeben (public), Für "Lesen" aber nicht, also nimmt der Compiler den Standardwert und der ist private. Private-Funktionen werden aber nicht "nach außen hin" sichtbar gemacht in einer DLL.
    Moin!

    danke erst einmal - aber irgendwie stehe ich irendwo auf dem Schlauch. Aus den Kommentaren habe ich mir

    VB.NET-Quellcode

    1. <DllImport("kernel32", EntryPoint:="GetPrivateProfileString")>
    2. public Shared Lesen( _
    3. ByVal Sektion As String, ByVal Key As String, ByVal StandartVal As String, _
    4. ByVal Result As StringBuilder, ByVal Size As Int32, ByVal Dateiname As String) As Int32
    5. End Function


    zusammengesetzt, was aber auch falsch ist! (System setzt Kringel)

    Dann habe ich einmal gegoogled und danach das End-Statement weggelassen - aber auch das hat keinen Erfolg gebracht.

    Kann mir einer von Euch nochmal weiterhelfen?

    Gruß Jan
    public shared Function Lesen muss es heißen ...
    <Haarspaltermodus>ne Kleinigkeit zu Deinem Parameter StandartVal As String: korrekt wäre StandardVal</Haarspaltermodus>
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @jan99 Signaturen von API-Funktionen holst Du bitte immer von pinvoke.
    Und hier ist GetPrivateProfileString().

    jan99 schrieb:

    System setzt Kringel
    Bei welchem Code?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Moin!
    soweit jetzt erst einmal alles gut - Danke !

    In dem pinvoke-Beispiel gibt es die Zeile

    VB.NET-Quellcode

    1. res = GetPrivateProfileString("AppName", "KeyName", "", sb, sb.Capacity, "c:\test.ini")


    Was mir sich nicht ganz erschließt ist dieser Rückgabewert RES !

    Kann mir einer von Euch noch etwas sagen?

    Gruß Jan

    jan99 schrieb:

    dieser Rückgabewert RES
    Rollst Du pinvoke-Deklaration ganz nach unten, da ist ein Verweis auf die MSDN (geht leider nicht).
    Aber der hier.

    MSDN schrieb:

    Return value
    The return value is the number of characters copied to the buffer, not including the terminating null character.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!