INI Files lesen



  • Hallo,

    Ich benutze Visual C++ 2010 und meine Frage ist wie kann ich INi Files lesen?
    Ich habe ein bisschen gegoogelt und das gefunden:

    #include "StdAfx.h"
    #include<iostream>
    #include <windows.h>
    #include <fstream>  
    using namespace std;
    
    int main()
    {
    	char waffenName[500];
    	//Einlesen der INI File für die Waffen von Level 1-10
    	GetPrivateProfileString("waffe1","WaffenName","NULL",waffenName,500,"waffe_1-10.ini"); 
    	cin.get();
    }
    

    Aber da sagt der mir:

    error C2664: 'GetPrivateProfileStringW': Konvertierung des Parameters 1 von 'const char [7]' in 'LPCWSTR' nicht möglich
    1>          Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    

    Kann mir einer helfen?

    MfG



  • Ja.

    benutze mal

    #undef UNICODE
    #undef _UNICODE

    vor
    #include<windows.h>

    Damit schaltest du dein offensichtlich eingeschaltetes Unicode-String-Geraffel wieder aus, welches zu deinem Compilerfehler führt.
    Da du offensichtlich einfach nur ein paar Codezeilen zum Laufen bringen willst, empfehle ich dir, nicht noch eine die weitere Baustelle "Unicode" unter MSVC aufzumachen.

    Am besten, du fügst die 2 o.g. Zeilen gleich ein in StdAfx.h


  • Mod

    Ein Unicode/MBCS Problem....

    Verwende die TCHAR Notation:

    TCHAR waffenName[500];
        //Einlesen der INI File für die Waffen von Level 1-10
        GetPrivateProfileString(_T("waffe1"),_T("WaffenName"),NULL,waffenName,500,_T("waffe_1-10.ini")); 
        cin.get();
    }
    

    Ansonsten suche in diesem Forum nach Unicode und MBCS und Du wirst hunderte von gleichlautenden Anfragen und Antworten finden.

    BTW: NULL ist kein String sondern ein Wert.



  • Wutz schrieb:

    Ja.

    benutze mal

    #undef UNICODE
    #undef _UNICODE

    vor
    #include<windows.h>

    Damit schaltest du dein offensichtlich eingeschaltetes Unicode-String-Geraffel wieder aus, welches zu deinem Compilerfehler führt.
    Da du offensichtlich einfach nur ein paar Codezeilen zum Laufen bringen willst, empfehle ich dir, nicht noch eine die weitere Baustelle "Unicode" unter MSVC aufzumachen.

    Am besten, du fügst die 2 o.g. Zeilen gleich ein in StdAfx.h

    Danke das war die Lösung

    [waffe1]
    WaffenName = "Test"
    

    Aber ich bekomme dann nichts mit den Code zurück gewiesen

    #include "StdAfx.h"
    #include<iostream>
    #include <windows.h>
    #include <fstream>  
    using namespace std;
    
    int main()
    {
    	TCHAR waffenName[500];
    	//Einlesen der INI File für die Waffen von Level 1-10
    	GetPrivateProfileString(_T("waffe1"),_T("WaffenName"),NULL,waffenName,500,_T("waffe_1-10.ini")); 
    	cout<<waffenName;
    	cin.get();
    }
    


  • In welchem Verzeichnis liegt denn bei dir die Ini-Datei?
    Wenn man nur den Dateinamen angibt, dann sucht die Funktion im Windows-Ordner danach.
    Verwende für eine lokale Datei den Pfadnamen ".\\waffe_1-10.ini".


  • Mod

    Wutz schrieb:

    #undef UNICODE
    #undef _UNICODE

    vor
    #include<windows.h>

    Wenn sollt eman dies über die Projekteinstellungen machen und nicht durch die #defines!

    Und wenn ist UNICODE kein Geraffel sondern der eigentliche Weg, den man mit seiner Software heute gehen sollte...
    Vielleicht ist es Dir entgangen, aber alle MBCS-Funckionen und Strings werden immer in die Unicode-Variante überführt...


Anmelden zum Antworten