Frage zu GetPrivateProfileString (ini-Datei)



  • Hallo,

    schreibe eine SDI-Anwendung unter Visual Studio .NET.
    Hierbei werden Einstellungen in ini-Dateien geschrieben und auch wieder eingelesen.

    Welche Möglichkeit gibt es denn beim Einlesen aus dem ini-File zu überprüfen, ob die geforderte AppName oder KeyName (Section oder Eintrag) vorhanden ist.
    Momentan verwende ich folgenden Quelltext:

    // lokale Variablen
    	char strTmp[40];
    
    	// X-Bias und X-SF
    	GetPrivateProfileString("KaldatenG","GyroX-Bias-K0",(const char*) "0.0", strTmp,30, strPathIni);
    

    Was ja bedeutet, dass wenn z.B. der Eintrag "GyroX-Bias-K0" nicht existiert wird einfach "0.0" (Alternativwert) genommen.
    Der Rückgabewert dieser Funktion gibt mir nur die Anzahl der zurückgegebenen Zeichen an. Und da meine Eingaben unterschiedlich lang sein können, macht es keinen Sinn sich darauf zu beziehen. 😕

    Was mich allerdings interessiert ist nur, ob der Eintrag und die Section vorhanden sind....und wenn nicht, dann möchte ich nämlich nicht die restlichen Einstellungen auch noch versuchen einzulesen....!

    Danke für Eure Hilfe.

    Gruss
    S.



  • Hm, habe mir gerade nochmal die Funktionsbeschreibung angeschaut.
    Was passiert denn, wenn die ersten zwei Parameter beide NULL sind?
    Bzw. was meinen die mit supplied buffer?
    Wird alles in lpReturnedString geschriebne (section names und key words)?
    Vielleicht kannst du zuerst alles section names auflisten und dann entscheiden, ob nach keys gesucht werden soll?



  • Du könntest als AppName oder KeyName NULL angeben, dann liefert dir die Funktion eine Liste aller vorhandenen Sektions- bzw. Schlüsselnamen - die mußt du nur noch mit deinem benötigten Namen vergleichen.

    (oder du gibst einen Defaultwert an, der 100% nicht in der INI steht, dann kannst du diesen Wert nachher als "nicht gefunden" interpretieren)



  • Paul_C. schrieb:

    Was passiert denn, wenn die ersten zwei Parameter beide NULL sind?

    Dann schreibt es die Sektionsnamen (durch \0 getrennt) in lpReturnedString.

    Bzw. was meinen die mit supplied buffer?

    Der verfügbare Speicherplatz für die Rückgabe - maximal nSize Bytes hinter lpReturnedString.



  • CStoll schrieb:

    Paul_C. schrieb:

    Was passiert denn, wenn die ersten zwei Parameter beide NULL sind?

    Dann schreibt es die Sektionsnamen (durch \0 getrennt) in lpReturnedString.

    Ah, also wird dann nur lpKeyName beachtet.

    CStoll schrieb:

    Paul_C. schrieb:

    Bzw. was meinen die mit supplied buffer?

    Der verfügbare Speicherplatz für die Rückgabe - maximal nSize Bytes hinter lpReturnedString.

    Verstehe ich nicht ganz?! Rückgabe ist doch ein DWORD. Was hat das mit lpReturnedString zu tun? Ist das im Speicher dann so angeordnet, dass erst lpReturnedString steht und dann die DWORD-Bytes? Oder was ist damit gemeint?
    Sry, wenn es eine doofe Frage ist, aber ich habe davon noch nie was gehört. 🤡



  • Du übergibst der Funktion einen Pointer auf ein entsprechend großes char-Array und die Größe dieses Arrays - dort schreibt sie den gefundenen Wert aus der INI rein. Der Rückgabewert gibt an, wie lang der tatsächlich geschriebene String war.



  • Ah, ok, habe dich missverstanden. Also die Größe des Strings auf den lpReturnedString zeigt.



  • Hallo,
    Danke für Eure Hilfe. 👍
    So funktionierts.....!
    Habe wohl die Hilfe in der MSDN auch nicht so ganz verstanden.

    Danke und noch nen schönen Tag.

    Gruss
    S.



  • Danke und dito. 🙂
    (Und danke an CStoll.)


Anmelden zum Antworten