GetPrivateProfileString nur erster Buchstabe



  • #include "stdafx.h"
    #include "iostream"
    #include "conio.h"
    #include "windows.h"
    
    int main()
    {
    	char Pfad[100];
    	char Version[100];
    	DWORD destSize;
    
    	WritePrivateProfileString(TEXT("files"),TEXT("Pfad"),TEXT("C:\\Files.ini"),TEXT("C:\\Files.ini"));
    	WritePrivateProfileString(TEXT("files"),TEXT("Version"),TEXT("1.00"),TEXT("C:\\Files.ini"));
    
    	destSize=500;
    	GetPrivateProfileString(TEXT("files"),TEXT("Pfad"),TEXT("C:\\KeineAhnung"),LPWSTR(Pfad),destSize,TEXT("C:\\Files.ini"));
    	GetPrivateProfileString(TEXT("files"),TEXT("Version"),TEXT("NULL"),LPWSTR(Version),destSize,TEXT("C:\\Files.ini")); 
    	std::cout << Version << "\n";
    	std::cout << Pfad << "\n";
    	_getch();
    
    }
    

    Wenn ich meinen Code ausführe wird in der Konsole immer nur die ersten Buchstaben angezeigt also so:

    1
    C
    

    Was habe ich falsch gemacht?!



  • Verwende bitte überall TCHAR und konsorten, dann hast Du nie Probleme!

    Also ersetze "char" durch "TCHAR"!

    Und lass bitte unnötige casts weg; das deutet immer auf Fehler im Code hin!
    (Dein "LPWSTR"!)



  • Wow das ging ja flott 👍
    der Compiler spuckt aber jetzt

    programm.cpp(17) : error C2664: 'GetPrivateProfileStringW': Konvertierung des Parameters 4 von 'TCHAR' in 'LPWSTR' nicht möglich
            Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    programm.cpp(18) : error C2664: 'GetPrivateProfileStringW': Konvertierung des Parameters 4 von 'TCHAR' in 'LPWSTR' nicht möglich
            Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    

    aus. Hier mein neuer Code

    TCHAR Pfad;
    	TCHAR Version;
    	DWORD destSize;
    
    	WritePrivateProfileString(TEXT("files"),TEXT("Pfad"),TEXT("C:\\Files.ini"),TEXT("C:\\Files.ini"));
    	WritePrivateProfileString(TEXT("files"),TEXT("Version"),TEXT("1.00"),TEXT("C:\\Files.ini"));
    
    	destSize=500;
    	GetPrivateProfileString(TEXT("files"),TEXT("Pfad"),TEXT("C:\\KeineAhnung"),Pfad,destSize,TEXT("C:\\Files.ini"));
    	GetPrivateProfileString(TEXT("files"),TEXT("Version"),TEXT("NULL"),Version,destSize,TEXT("C:\\Files.ini")); 
    	std::cout << Version << "\n";
    	std::cout << Pfad << "\n";
    	_getch();
    


  • Kannst Du eigentlich lesen?

    Ich schrieb "ersetze char durch TCHAR"! Was hast Du gemacht?

    char Pfad[100];
    

    =>

    TCHAR Pfad[100];
    

    Und das mit dem "destSize" lernen wir auch nochmals, bzw. lesen die Doku zu GetPrivateProfileString...



  • das destSize stand in der F.A.Q trotzdem Danke



  • Ja, natürlich war es so in der FAQ... aber Du hast Deinen Code geändert und dann sollte man halt schon wissen was man macht!



  • ist es normal das "0012FDC8" als Ausgabe erscheint?



  • Ja, da Du die DTL verwendest und dort wird der Zeiger auf den TCHAR ausgegeben...
    Das liegt daran, das die STL von TCHAR keine Ahnung hat... und Du C und C++ vermischt...

    Der einfachheit halber verwende:

    _tprintf
    

    oder

    #ifdef _UNICODE 
    #define tcout std::wcout
    #else
    #define tcout std::cout
    #endif
    

    und dann

    tcout << Pfad;
    


  • Danke jetzt funktionierts! 👍 👍 👍



  • ich weiß nicht ob das hier rein gehört aber weil der thread schon existiert stelle ich mal meine frage: wie mache ich if abfragen mit tchar, und wie konvertiere ich tchar in string?



  • #SuperSonic# schrieb:

    ich weiß nicht ob das hier rein gehört aber weil der thread schon existiert stelle ich mal meine frage: wie mache ich if abfragen mit tchar, und wie konvertiere ich tchar in string?



  • Je nach _UNICODE-Define entweder _gar keine Konvertierung_ oder mittels WideCharToMultiByte.



  • und was ist mit if abfrage bei tchar?

    if (antwort = "so und so")
    

    klappt net



  • Das klappt unabhängig von TCHAR auch nicht mit char....
    Du meinst wohl "_tcscmp"...



  • storage.h:

    typedef char TCHAR
    

    Ok, ein Newbie, aber gleich so einen Kram erzählen, ich weiß nicht ...


Anmelden zum Antworten