Char* zu LPCWSTR
-
Ach so... ja klar... hat natürlich nichts tchar.h zu tun.
DIese "Makros" sind in "atlconv.h" deklariert und verwenden jetzt templates...
-
@branleb: Nein es funktioniert nicht
@Xantus: Das hab ich jetzt nochmal gemacht bin aber nicht auf meinen Fehler gestoßen.
Mein Momentaner Stand:LPWSTR buffer=(LPWSTR)malloc(strlen(text)+1); MultiByteToWideChar(CP_ACP,0,text,sizeof(text),buffer,sizeof(buffer));
Aber da kommen irgendwelche chinesisch aussehenden Zeichen raus!
Bitte helft mir
-
Verzweifelter Anfänger schrieb:
@Xantus: Das hab ich jetzt nochmal gemacht bin aber nicht auf meinen Fehler gestoßen.
also wenn du die ATL verwendest, nimm die von Martin Richter beschriebene template-Klasse.
zu deinem code
Verzweifelter Anfänger schrieb:
Mein Momentaner Stand:
LPWSTR buffer=(LPWSTR)malloc(strlen(text)+1); MultiByteToWideChar(CP_ACP,0,text,sizeof(text),buffer,sizeof(buffer));
Aber da kommen irgendwelche chinesisch aussehenden Zeichen raus!
Bitte helft mir- der buffer isn bisschen klein, oder? du weißt schon, dass sizeof(wchar_t) gewöhnlich 2 bytes groß ist?
- verwende doch mal CP_UTF8 und setzte dwFlags auf 0;
- schau dir mal an, was der letzte parameter (größe) des buffers haben will.
keine größe in bytes mit sizeof(buffer), sondern die größe des strings in WCHAR-werten
- lies nochmal die "Return Values"-Sektion und versuche, damit auf den Fehler zu stoßen. Rückgabewerte vergleichen, GetLastError() und so
- übrigensMSDN schrieb:
MultiByteToWideChar does not null-terminate an output string if the input string length is explicitly specified without a terminating null character. To null-terminate an output string for this function, the application should pass in -1 or explicitly count the null terminator for the input string.
-
LPWSTR buffer; buffer=(LPWSTR)malloc(MultiByteToWideChar(CP_UTF8,0,titel,-1,buffer,0)); MultiByteToWideChar(CP_UTF8,0,titel,-1,buffer,sizeof(buffer)/sizeof(buffer[0]));
Funktioniert aber leider immer noch nicht! GetLastError() meckert nicht!
-
hmmmmmmmmm schrieb:
Martin Richter schrieb:
CA2W ist eine fertige Funktion in tchar.h
Hö? Ist das nicht aus der ATL?
Sorry! Ist natürlich ATL...
-
#include <atlbase.h>
und dann in deine Funktion:
USES_CONVERSION;
A2W(charvar,widevar);
-
Die Makroc *ohne* ein "C" ganz vorne sollte man eigentlich nicht mehr verwenden! Sie haben massive Probleme, wenn diese in einer Schleife verwendet werden... Auch ist immer das "unschöne" USES_CONVERSION notwendig...
Die neuen Makros verwenden Templates, da ist es viel schöner=>
CA2*
-
@DaRpH: Danke für den Tipp! Leider findet der Compiler die atlbase.h nicht. Woran kann das legen?
-
Hast du die Express Edition?
-
Ist dir bewußt das bei
LPWSTR buffer;
sizeof(buffer) == 4 ist?
-
Ja, ich habe die Express Edition
-
dann gehts nicht, da ist ATL nicht bei.
-
# include <tchar.h>
static LPCWSTR mTitle = _T("cat.wav");