char Arrays und MessageBox
-
Hi ihr,
In einer MessageBox einen Text auszugeben ist nicht schwer. Doch sobald es daran geht eine Charzeichenkette auszugeben gibt es schon wieder Probleme:
#include "stdafx.h" #include <windows.h> #pragma comment(lib, "d3d9.lib") int g_iNumAdapters; D3DADAPTER_IDENTIFIER9* g_pAdapters; PDIRECT3D9 g_pD3D = NULL; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE HPrevInstance, char* pcCmdLine, int iShowCmd) { char hallo[1024] = "HEY"; MessageBox(NULL, (LPCWSTR)hallo, L"FEHLER", MB_OK | MB_ICONINFORMATION); }Das ganze funktioniert zwar, allerdings gibt die MessageBox nur Blödsinn aus.
Mit Blödsinn meine ich eigentlich nur irgendwelche Rechtecke, welche eigentlich keinen Sinnergeben.Ich habe das Gefühl, dass das etwas mit dem LPCWSTR-Format zutun hat.
Kann mir jemand genaueres sagen?cya
David
-
Probier das mal:
wchar_t hallo[1024] = L"HEY"; MessageBoxW(NULL, hallo, L"FEHLER", MB_OK | MB_ICONINFORMATION);
-
So:
#include <tchar.h> TCHAR hallo[] = "HEY"; MessageBox(NULL, hallo, _T(FEHLER), MB_OK | MB_ICONINFORMATION);
-
Jochen Kalmbach schrieb:
So:
#include <tchar.h> TCHAR hallo[] = "HEY"; MessageBox(NULL, hallo, _T(FEHLER), MB_OK | MB_ICONINFORMATION);Muss heißen:
TCHAR hallo[] = _T("HEY");
-
Upps... sorry...
-
Ist demnach also LPCWSTR ein synonym für Tchar?
-
Nein. wchar_t ist für Wide-Strings (UNICODE) und char für Ansi-Strings.
In verschiebenen Windows-Headern findest du noch ein paar typedef dazu. "LPC" steht für "long pointer const", "W" kennzeichnet Wide-String und "STR" immer String.
"LPSTR" wäre demnach "long pointer string". "LPCSTR" "long pointer const string" und "LPCWSTR" "long pointer const wide string".Jetzt gibt es durch den Header tchar.h Funktionen zur Stringbearbeitung usw. als TCHAR-Version d.h. TCHAR ist, wenn _UNICODE gesetzt ist(Compilereinstellungen oder #define) wchar_t und ansonsten ist es ein simples char.
-
... und das Makro
_T( )ist so nett, Dir vor String Literale bei bedarf (UNICODEist definiert) ein 'L' zu setzen, damit daraus ein Wide-String wird:_T( "Hello" ); // wird zu L"Hello"; // UNICODE // oder: "Hello"; // ! UNICODEgreetz, Swordfish