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öglichHat 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.