(VS 2005) Compilereinstellungen bezüglich Unicode?



  • hi

    habe bei meinem derzeitigen projekt irgendwie probleme mit dem compiler (visual studio 2005) ich arbeite in c++

    bekomme vom compiler immer folgende fehlermeldungen

    error C2664: 'GetModuleHandleW': Konvertierung des Parameters 1 von 'const char [11]' 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

    ein beispiel dafür.

    also mein problem liegt wohl daran das mein code mit char variablen arbeitet aber viele funktionen von windows und directx diese variablen nicht konvertieren kann

    und da ich nicht alle variablen auf wchar_t usw umwandeln will frage ich mich ob man bei dem compiler irgendwas einstellen kann damit NICHT die unicode varianten der funktionen verwendet werden

    ps: habe mein projekt vor 1 jahr ca begonnen und den code damals mit einen anderen compiler kompiliert und hatte damals keine dieseer fehlermeldungen (seitdem hat sich der code kein stück verändert)



  • Ich möchte da mal eine Frage anhängen, habe ein ähnliches Problem. Werde die Frage kürzer formulieren in der Hoffnung das so eher jemand antwortet.

    Mit GCC (DevCpp) compiled der folgende Code wunderbar.

    WIN32_FIND_DATA FindFileData;
    HANDLE hFind;
    hFind = FindFirstFile("c://windows", &FindFileData);
    

    Beim Microsoft C Compiler (Visual Studio) kommt eine Fehlermeldung.

    WIN32_FIND_DATA FindFileData;
    HANDLE hFind;
    hFind = FindFirstFile("c://windows", &FindFileData);
    

    "error C2664: 'FindFirstFileW': Konvertierung des Parameters 1 von 'const char [12]' in 'LPCWSTR' nicht möglich"

    Jetzt könnte ich anstatt "c://windows" immer TEXT("c://windows") schreiben. Aber das will ich eigentlich vermeiden, Compileroption wäre besser.

    Also wäre auch sehr dankbar über einen Link der einem die ganze Problematik mit den verschiedenen Codierungen und Lösungen erklärt.



  • Hallo

    Project->Properties->General->Character Set-> Use Multibyte Character Set

    chrische



  • petrolo schrieb:

    Ich möchte da mal eine Frage anhängen, habe ein ähnliches Problem. Werde die Frage kürzer formulieren in der Hoffnung das so eher jemand antwortet.

    Mit GCC (DevCpp) compiled der folgende Code wunderbar.

    WIN32_FIND_DATA FindFileData;
    HANDLE hFind;
    hFind = FindFirstFile("c://windows", &FindFileData);
    

    Beim Microsoft C Compiler (Visual Studio) kommt eine Fehlermeldung.

    WIN32_FIND_DATA FindFileData;
    HANDLE hFind;
    hFind = FindFirstFile("c://windows", &FindFileData);
    

    "error C2664: 'FindFirstFileW': Konvertierung des Parameters 1 von 'const char [12]' in 'LPCWSTR' nicht möglich"

    Jetzt könnte ich anstatt "c://windows" immer TEXT("c://windows") schreiben. Aber das will ich eigentlich vermeiden, Compileroption wäre besser.

    Also wäre auch sehr dankbar über einen Link der einem die ganze Problematik mit den verschiedenen Codierungen und Lösungen erklärt.



  • petrolo schrieb:

    Jetzt könnte ich anstatt "c://windows" immer TEXT("c://windows") schreiben. Aber das will ich eigentlich vermeiden, Compileroption wäre besser.

    Also wäre auch sehr dankbar über einen Link der einem die ganze Problematik mit den verschiedenen Codierungen und Lösungen erklärt.

    Und warum willst Du das vermeiden. Gerade der Syntax mit _T oder TEXT macht Deine Software varaible.
    Sonst musst Du eben auch GetModuleFileNameA oder GetModuleFileNameW verwenden.



  • beuschl schrieb:

    frage ich mich ob man bei dem compiler irgendwas einstellen kann damit NICHT die unicode varianten der funktionen verwendet werden

    - Projekt/Eigenschaften/Konfigurationseigenschaften/Allgemein/Zeichensatz einstellen auf "Multibyte-Zeichensatz verwenden"
    ODER
    - im Quellcode oberhalb von

    #include <windows.h>
    

    einfügen

    #undef UNICODE
    #undef _UNICODE
    

    und falls dir die "unsafe"-Compilerwarnungen über sind gleich noch

    #pragma warning ( disable:4996 )
    


  • hFind = FindFirstFile("c://windows", &FindFileData);
    

    Dass hier auch "c:/windows" ausreicht, der ganze Sinn und Zweck des Umdrehens des Backslashes, ist dir schon klar?


Anmelden zum Antworten