Funkcja z parametrem UNICODESTRING

dział ogólny

Funkcja z parametrem UNICODESTRING

Nowy postprzez Corvis » wtorek, 10 stycznia 2012, 09:24

Witam,

Napisałem sobie funkcję która przyjmuje jako parametr String (UnicodeString) wywołuje ją z takim parametrem : "Russian (Pусский)" a kompilator mi wywala takie coś:


[BCC32 Warning] FGui.cpp(151): W8114 Character represented by universal-character-name '\u0443' cannot be represented in the current ansi locale
Full parser context
FGui.cpp(53): parsing: _fastcall TFrmGui::TFrmGui(TComponent *)
[BCC32 Warning] FGui.cpp(151): W8114 Character represented by universal-character-name '\u0441' cannot be represented in the current ansi locale
Full parser context
FGui.cpp(53): parsing: _fastcall TFrmGui::TFrmGui(TComponent *)
[BCC32 Warning] FGui.cpp(151): W8114 Character represented by universal-character-name '\u0441' cannot be represented in the current ansi locale
Full parser context
FGui.cpp(53): parsing: _fastcall TFrmGui::TFrmGui(TComponent *)
[BCC32 Warning] FGui.cpp(151): W8114 Character represented by universal-character-name '\u043a' cannot be represented in the current ansi locale
Full parser context
FGui.cpp(53): parsing: _fastcall TFrmGui::TFrmGui(TComponent *)
[BCC32 Warning] FGui.cpp(151): W8114 Character represented by universal-character-name '\u0438' cannot be represented in the current ansi locale
Full parser context
FGui.cpp(53): parsing: _fastcall TFrmGui::TFrmGui(TComponent *)
[BCC32 Warning] FGui.cpp(151): W8114 Character represented by universal-character-name '\u0439' cannot be represented in the current ansi locale
Full parser context
FGui.cpp(53): parsing: _fastcall TFrmGui::TFrmGui(TComponent *)


Potem w labelu widzę tylko Russian P?????. Sprawdzałem mapowanie i mam ustawione na wchar_t.

Wie ktoś o co tu chodzi ???
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Funkcja z parametrem UNICODESTRING

Nowy postprzez Corvis » wtorek, 10 stycznia 2012, 09:29

Rozwiązaniem problemu jest dodanie _TEXT("Tutaj tekst"). Ale nie bardzo rozumiem dlaczego tak się dzieje :o
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Funkcja z parametrem UNICODESTRING

Nowy postprzez polymorphism » wtorek, 10 stycznia 2012, 10:53

Dzieje się tak dlatego, że zwykły literał tekstowy jest interpretowany jako ciąg znaków w kodowaniu ANSI, z reguły jest to kodowanie systemowe, czyli dla polski jest to cp1250. Tekst pisany cyrylicą z oczywistych względów nie da się zapisać w takim kodowaniu, stąd ten błąd. Dodanie makra _TEXT()/TEXT()/_T() powoduje, że literał tekstowy, przy włączonym mapowaniu unikodowym, zostanie poprzedzony literką L, co oznacza, że mamy do czynienia z literałem unikodowym. No a tu problemu z cyrylicą nie ma.
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
Corvis
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Funkcja z parametrem UNICODESTRING

Nowy postprzez Cyfrowy Baron » czwartek, 12 stycznia 2012, 13:10

Corvis napisał(a):Rozwiązaniem problemu jest dodanie _TEXT("Tutaj tekst").


Prościej jest to napisać tak:

KOD cpp:     UKRYJ  
 L"Jakiś tekst";
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 7 gości