[VC Express] Unicode-Support in den Projekteinstellungen deaktivieren?



  • Hallo,

    nun habe ich mich mal endlich an VS Express rangewagt. Bin nach dieser Anleitung vorgegangen, und habe alles erfolgreich abgeschlossen. Das Probeprojekt konnte ich auch erfolgreich kompilieren. Nun habe ich ein neues Win32 Konsolenprojekt erstellt, und diesen Code eingefügt:

    // Testprojekt3.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        HWND hwnd = FindWindow ("ConsoleWindowClass", NULL);
    
        if (hwnd == NULL)
          return 0;
    
        // Jetzt kann das Handle übergeben werden, und die Konsole versteckt sich.
        ShowWindow (hwnd, SW_HIDE);
    
        getchar ();
        //Das Programm muss aber im Taskmanager wieder geschlossen werden ;-)
    }
    

    ...und dabei kommt folgender Fehler raus:

    VC Express schrieb:

    error C2664: 'FindWindowW': Konvertierung des Parameters 1 von 'const char [19]' in 'LPCWSTR' nicht möglich

    Soweit kann ich die Fehlermeldung noch nachvollziehen, es muss der Unicode-Support in den Projekteinstellungen entfernt werden. Das habe ich dann auch gemacht:

    Project->Testprojekt3-Eigenschaften->Konfigurationseigenschaften->Allgemein->Zeichensatz: Nicht festgelegt

    Klappt leider nicht. Dann kommen weitere drei Fehler:

    VC Express schrieb:

    Testprojekt3.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__ShowWindow@8" in Funktion "_main".
    Testprojekt3.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__FindWindowA@8" in Funktion "_main".
    C:\Dokumente und Einstellungen\Michi\Eigene Dateien\Visual Studio 2005\Projects\Testprojekt3\Debug\Testprojekt3.exe : fatal error LNK1120: 2 nicht aufgelöste externe Verweise.
    Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Michi\Eigene Dateien\Visual Studio 2005\Projects\Testprojekt3\Testprojekt3\Debug\BuildLog.htm" gespeichert.
    Testprojekt3 - 3 Fehler, 0 Warnung(en)

    Was muss ich nun machen, damit ich ohne Unicode kompilieren kann? danke.



  • Warum willst du kein Unicode? Willst du nur mit ASCII arbeiten? 😮
    Frag dich lieber "Wie kann ich Unicode richtig einsetzen?"!

    WND hwnd = FindWindow (L"ConsoleWindowClass", NULL);
    // oder
    WND hwnd = FindWindow (_TEXT("ConsoleWindowClass"), NULL);
    

    Wenn du wirklich kein Unicode haben willst (oh man, ich kanns nicht verstehen):
    Das _tmain durch das alte bekannte main() austauschen (steht auch indirekt in der Fehlermeldung).

    Aber wie gesagt, ASCII ist ein Rückschritt...



  • Frag dich lieber "Wie kann ich Unicode richtig einsetzen?"!

    Okay Artchi, hast Recht 🤡 Im Grunde ist es mir egal, ob ich mit ASCII oder Unicode kompiliere. Dann mache ich es eben mit deinem Lösungsvorschlag. Spricht natürlich nichts dagegen. Danke 😉



  • Oh, es funktioniert bei diesem Code aber trotzdem nicht:

    // Testprojekt3.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung. 
    // 
    
    #include "stdafx.h" 
    
    int _tmain(int argc, _TCHAR* argv[]) 
    { 
        HWND hwnd = FindWindow (_TEXT ("ConsoleWindowClass"), NULL); 
    
        if (hwnd == NULL) 
          return 0; 
    
        // Jetzt kann das Handle übergeben werden, und die Konsole versteckt sich. 
        ShowWindow (hwnd, SW_HIDE); 
    
        getchar (); 
        //Das Programm muss aber im Taskmanager wieder geschlossen werden ;-) 
    }
    

    bla.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__ShowWindow@8" in Funktion "_wmain".
    bla.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__FindWindowW@8" in Funktion "_wmain".

    Wasn da los?



  • 1. Du hast die Anleitung nicht 100%ig befolgt
    2. Es macht IMHO keinen Sinn auf "Ansi" umzustellen
    3. Die kurzfristige Lösung heisst:

    #pragma comment(lib, "User32.lib")
    

    4. Die langsfristige Lösung: Such in der Anleitung nach "user32.lib" und beachte diese!



  • Microjunk schrieb:

    AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib"

    ...wenn du das meinst, habe ich es bereits getan. Mit dem nachträglichen Linken, wie du es mir gezeigt hast, funktioniert es. Anscheinend muss user32.lib eben groß geschrieben werden, also User32.lib, da sie sonst der Linker nicht findet. Woher soll ich das wissen?

    Aber danke für die Hilfe, jetzt funktioniert es. Und die Datei werde ich auch umändern.



  • Gross- und Kleinschreibung ist unter Windows bei Dateinamen egal...


Anmelden zum Antworten