Rechnernamen herausfinden: Problem mit LPWSTR



  • Hallo!!!

    Ich habe folgendes problem. Ich wollte ein kleines Programm schreiben um den Rechnernamen zu ermitteln. Und habe mir Folgenden Forenbeitrag angeschaut: http://www.c-plusplus.net/forum/viewtopic-var-t-is-214378-and-highlight-is-computername.html

    Hier schein des recht einfach mit 3 Zeilen Code zu funktionieren. Jedoch bekomme ich folgende Fehlermeldung:

    error C2664: 'GetComputerNameW': Konvertierung des Parameters 1 von 'char [256]' in 'LPWSTR' nicht möglich
    

    Hat jemand ne Idee wie man das lösen kann???



  • Wahrscheinlich hast Du eine Anwendung mit der Einstellung "Unicode" erstellt.
    D.h. Du müßtest bei Deinem Beispiel oben das "char" in "TCHAR" (oder alternativ in "wchar") umwandeln:

    TCHAR ComputerName[256];
    

    evtl. mußt Du zusätzlich

    #include <tchar.h>
    

    einbinden.

    Allgemeiner Hinweis: Viele Win32 API-Funktionen sind jeweils als ANSI (8bit char) und Unicode (16bit wchar) implementiert, erkennbar am Zusatzbuchstaben 'A' und 'W'.

    Z.B. bei GetComputerName() sieht so aus:
    ANSI: GetComputerNameA()
    Unicode: GetComputerNameW()

    Martin



  • Vielen Dank!!!
    Ich habe jetzt den Zeichensatz unter den Eigenschaften auf Multi-Byte gesetzt. Mich würde nur interessieren was das bewirkt und welche Einstellung eigentlich Standard ist - Multi-Byte oder Unicode. Muss ich jetzt etwas Bestimmtes beachten, wenn ich es auf Multi-Byte umgestellt habe???

    Danke schonmal für die Antworten!!!



  • Grob gesagt in etwa so:

    Bei Einstellung "Multi-Byte":
    - Funktionen mit Endung 'A' werden verwendet, z.B. GetComputerNameA().
    - aus TCHAR wird char.

    Bei Einstellung "Unicode":
    - Funktionen mit Endung 'W' werden verwendet, z.B. GetComputerNameW().
    - aus TCHAR wird wchar.

    Unter Visual Studio 2005 und 2008 ist "Unicode" voreingestellt.

    Martin

    P.S.: Generell arbeitet Windows seit WinNT über Win2000 bis heute WinVista intern immer als Unicode. D.h. bei Anwendungen mit "Multi-Byte" Einstellung werden Strings in den Funktionen intern erstmal von ANSI auf Unicode umgewandelt, bevor sie an die eigentliche Unicode-Funktion übergeben werden.
    Daher ist eine Unicode-Anwendung i.d.R. etwas schneller als MultiByte-Anwednung.


Anmelden zum Antworten