Fehler mit einer Klasse



  • Hi, ich habe versucht mit MS Vc++ 2005 diese Klasse zu benützen
    http://www.codeproject.com/useritems/IniReader.asp
    , aber bekomme immer den Fehler:

    1>.\IniWriter.cpp(13) : error C2664: 'WritePrivateProfileStringW': Konvertierung des Parameters 1 von 'char *' 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.

    Und den dann gleich 8 mal. Kann mir bitte jemand weiterhelfen?



  • In den Projekteinstellungen nicht UNICODE sondern MBCS auswählen.

    Grüsse

    *this



  • ausgezeichnet, danke 🙂 . Noch eine Frage: Inwieweit kann das negative Auswirkungen auf mein restliches Programm haben?



  • lalalala schrieb:

    ausgezeichnet, danke 🙂 . Noch eine Frage: Inwieweit kann das negative Auswirkungen auf mein restliches Programm haben?

    Das kann ich Dir so nicht sagen.

    Man könnte auch das Codeschipsel auf UNICODE migrieren (was ich tun würde); aber das zu erklären führt hier deutlich zu weit.

    Grüsse

    *this



  • Ok , danke. Nur noch eine Frage : Woran hast du das Problem erkannt / gewusst wie man das löst?



  • Anhand der Fehlermeldung? 😉

    Es gibt von den WinAPI-Funktionen je eine Ansi- und Widestring-Version. Das W-Suffix bei den WinAPI-Funktionen steht für "Wide". Und in ein char* passt ein Wide-String eher nicht rein.



  • klingt sogar in meinen Ohren vernünftig 🙂 .
    Na dann, danke .



  • lalalala schrieb:

    Ok , danke. Nur noch eine Frage : Woran hast du das Problem erkannt / gewusst wie man das löst?

    An dem W in

    WritePrivateProfileString[b]W[/b]
    LPC[b]W[/b]STR
    

    Das steht für "wide" oder "wchar_t".

    Grüsse

    *this

    P.S.: Wenn Du doch UNICODE verwenden willst solltest Du

    - TCHAR statt char*
    - _T("Hello World") statt "Hello World"
    _ _tmain statt main
    - und _tprintf statt printf usw..
    - std::wcout statt std::cout
    - std::wstring statt std::string
    - std::wifstream statt std::ifstream

    verwenden. Am besten Du machst Dir eine

    //My.hpp
    //...
    #include <iostream>
    #include <string>
    
    namespace My {
    
    #ifdef _UNICODE
        typedef std::wstring string;
        typedef std::wostream ostream;
    //...
    #else
        typedef std::string string;
        typedef std::ostream ostream;
    //...
    #endif
    
        extern ostream& cout;
    //...
    } // namespace My
    
    // un deine kleine My.cpp
    #include "My.hpp"
    #include <iostream>
    
    namespace My {
    
    #ifdef _UNICODE
        ostream& cout = std::wcout;
    //...
    #else
        ostream& cout = std::cout;
    //...
    #endif
    } // namespace My
    // EOF
    

    und verwendest nicht

    using namespace std;
    

    sondern dann sowas

    My::cout << _T("Hello World") << std::endl;
    


  • Super, nochmals danke für deine Extramühe 👍 .



  • oder du definierst dir nen eigenen string ...

    namespace std
    {
        typedef basic_string<TCHAR> tstring;
    };
    

Anmelden zum Antworten