Char* zu LPCWSTR
-
Hallo,
Ich habe jetzt schon ziemlich lange gegoogelt, aber nix gefunden was mir bei meinem Problem helfen würde.
Ich brauche eine Funktion die char* in LPCWSTR umwandelt.LPCWSTR CharToWideChar(char* text) { ... }
Was ich nicht machen kann ist:
- _T("Text")
- In den Einstellungen Unicode abschalten
Danke schonmal für Antworten!
p.s.: Hoffe ich habe das im richtigen Forum gepostet da ich VC++ 2008(9.0) verwende.
-
wie wärs mit MultiByteToWideChar ?
// edit: korrigiert
-
Wie würde das dann funktionieren?
Ich finde keine Dokumentation zu dem Befehl
-
Xantus hat sich leicht vertan, die Funktion heißt MultiByteToWideChar.
-
LPCWSTR CharToWideChar(char* txt) { int len=strlen(txt)+1; LPCWSTR buffer[len]; MultiByteToWideChar(CP_ACP,NULL,txt,-1,buffer,len) return &buffer; }
Das will iwie nicht! Was mache ich falsch?
-
CA2W ist eine fertige Funktion in tchar.h
-
error C3861: "CA2W": Bezeichner wurde nicht gefunden.
Ja, ich habe die tchar.h eingebunden!
-
static_cast<LPCWSTR>(txt) mal probiert?
habe kein windows, kansn daher net testen, aebr n kumpel von mir meinte, das klappt.static_cast<wchar_t*>(txt) wäre evtl ne andre variante, die evtl das bewirken könnte, was du suchst - probeirs mal aus.
greets
Branleb
-
Verzweifelter Anfänger schrieb:
Das will iwie nicht! Was mache ich falsch?
schau dir mal deine argumente und die argumente, die auf http://msdn2.microsoft.com/en-us/library/ms776413(VS.85).aspx beschrieben sind, an.
-
Martin Richter schrieb:
CA2W ist eine fertige Funktion in tchar.h
Hö? Ist das nicht aus der ATL?
-
MFC/ATL... aber wir sind ja hier in dem passenden Forum, oder?
-
Ich hätte auch nicht gefragt wenn Martin nicht tchar.h geschrieben hätte.
-
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?