Originariamente inviato da stefanoB
questo era un test per capire i funzionamenti delle stringhe unicode, e txt è una variabile puntatore definita in WM_CREATE,
ma non credo sia questo perchè provandola a definire anche global stesso risultato;
si string.h è incluso come base dall'ide
ho provato con:
codice:
wchar_t *txt=NULL;
wchar_t *txt;=new wchar_t*();
wsprintf(txt,L"%s",L"Managemente Unicode");
che lo inizializzi o meno presenta sempre lo stesso problema:
Questa riga
codice:
wchar_t *txt;=new wchar_t*();
non ha nessun senso. Il codice corretto è
codice:
wchar_t * txt = new wchar_t[256]; //alloca una stringa Unicode di 256 caratteri nell'heap
//...
delete[] txt;
; se le dimensioni sono fisse fai anche prima a scrivere
codice:
wchar_t txt[256]; //alloca una stringa Unicode di 256 caratteri sullo stack
.
Ma qui non è una faccenda di Unicode, sono rudimenti di C++, queste considerazioni valgono ugualmente sia per caratteri ANSI (char) che per Unicode (wchar_t), nonché per qualunque array stile C in genere!
in primo ti ringrazio per i precedenti approfondimenti!
l'uso dei cast era dato dal fatto che anche se avevo creato un progetto test Unicode se non utilizzavo i cast non erano interpretate come stringhe unicode, questo perà lavorando in codeblock 8.02 mingw 3.4.5; in Dev non ho necessità di castare.
Anche DevC++ usa MinGW, il problema era che non mettevi le "L" davanti alle stringhe; tra l'altro forzando il cast di una stringa ANSI (char *) ad Unicode (wchar_t *) ottenevi delle stringhe Unicode potenzialmente senza senso.
toglimi questo dubbio:
LPTSTR in win 32 SDK è definito così ... "Pointer to a null-terminated Windows or Unicode character string."
visto questo pensavo andasse bene !?!
Se lavori solo in Unicode, usi LPWSTR ("Pointer to a null-terminated Unicode character string."). LPTSTR serve per poter compilare nei due modi differenti (ANSI e Unicode), come spiegato nel link che ti ho postato in precedenza.
#usando vocali accentate ... se non le uso non ho problemi
codice:
wchar_t **Imenu=new wchar_t *[31];
...
Imenu[2]=L"Città";
C:\Dev-Cpp\Progetti\ManagementXpVista\Makefile.win [Build Error] n\make.exe: *** [obj/struct.o] Error 1
struct.cpp:33:47: converting to execution character set: Invalid argument
non è un carattere "strano" comunque supportato da unicode, perchè ciò che c'è che non va?
Si tratta di un bug di gcc (link); prova a salvare il file come UTF8.