CYFROWY BARON • PROGRAMOWANIE • Zobacz wÄ…tek - Konwersja String na wchar_t

Konwersja String na wchar_t

dział ogólny

Konwersja String na wchar_t

Nowy postprzez Pitek » sobota, 10 grudnia 2011, 02:02

KOD cpp:   •  UKRYJ  •
MoveFile(ListBox1->Items->Strings[k]+"b.csw", Path+"Blablabla"+ListBox1->Items->Strings[k]+"b.csw");

Ta linijka wyrzuca mi taki błąd :

[BCC32 Error] Unit1.cpp(1197): E2034 Cannot convert 'UnicodeString' to 'const wchar_t *'
Full parser context
Unit1.cpp(1152): parsing: void _fastcall TForm1::FormCreate(TObject *)
[BCC32 Error] Unit1.cpp(1197): E2342 Type mismatch in parameter 'lpExistingFileName' (wanted 'const wchar_t *', got 'UnicodeString')
Full parser context
Unit1.cpp(1152): parsing: void _fastcall TForm1::FormCreate(TObject *)


Moje pytanie jak to zapisać żeby to działało ? Być może jest późno i nie ogarniam tak prostego tematu ale chyba dalej też nic nie wymyśle... :zawiedziony:
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
PodziÄ™kowaÅ‚ : 43
OtrzymaÅ‚ podziÄ™kowaÅ„: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Re: Konwersja String na wchar_t

Nowy postprzez Corvis » sobota, 10 grudnia 2011, 09:18

KOD cpp:   •  UKRYJ  •
MoveFile(String(ListBox1->Items->Strings[0]+"b.csw").w_str(), String(Path+"Blablabla"+ListBox1->Items->Strings[0]+"b.csw").w_str());
"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 VistaChrome

Re: Konwersja String na wchar_t

Nowy postprzez Cyfrowy Baron » sobota, 10 grudnia 2011, 09:35

To co podał Corvis zadziała zależnie od mapowania.

W tym poście opisałem to dokładnie: http://programowanie.cal.pl/forum/viewtopic.php?f=16&t=1098#p7401

Właściwie to Corvis trochę namieszał, gdyż najpierw rzutuje to na zmienną String (nie wiem po co), a potem dokonuje konwersji funkcją w_str(), podczas gdy to rzutowanie jest zbędne, gdy tam już są zmienne typu String, więc wystarczy użyć funkcji t_str(), c_str() lub w_str().



Ustaw mapowanie ma wchar_t, a kod będzie wyglądał tak, przy założeniu, że zmienna Path jest typu String, czyli UnicodeString:

KOD cpp:   •  UKRYJ  •
MoveFile( ( ListBox1->Items->Strings[k] + "b.csw").t_str(), (Path + "Blablabla" + ListBox1->Items->Strings[k] + "b.csw").t_str() );


lub (zalecam, gdyż zadziała niezależnie od mapowania):

KOD cpp:   •  UKRYJ  •
MoveFile( ( ListBox1->Items->Strings[k] + "b.csw").c_str(), (Path + "Blablabla" + ListBox1->Items->Strings[k] + "b.csw").c_str() );


Gdybyś chciał przekazać funkcji jawnie ścieżki do plików, to wtedy nie używasz funkcji konwertujących, lecz stawiasz przed łańcuchem znaków L.

KOD cpp:   •  UKRYJ  •
MoveFile( L"c:\\temp\\plik.txt",  L"d:\\plik.txt" );


KOD cpp:   •  UKRYJ  •
String fDest = "d:\\plik.txt";

MoveFile( L"c:\\temp\\plik.txt", fDest.t_str() );


Ogólnie problem sprowadza się do tego, że funkcja MoveFile oczekuje argumentów typu wchar_t, a ty przekazujesz jej argumenty typu UnicodeString (String - domyślnie UnicodeString). Dlatego konieczna jest konwersja.
W nowszych wersjach środowiska większość funkcji operuje już na zmiennych typu wchar_t a nie char dlatego zalecam ustawienie mapowania na ten typ.
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

Re: Konwersja String na wchar_t

Nowy postprzez Corvis » sobota, 10 grudnia 2011, 09:52

A no, faktycznie bardziej elegancie rozwiązanie podałeś ;)
"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 VistaChrome

Re: Konwersja String na wchar_t

Nowy postprzez Pitek » sobota, 10 grudnia 2011, 15:09

Bardzo Panom dziękuję za odpowiedź :)
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
PodziÄ™kowaÅ‚ : 43
OtrzymaÅ‚ podziÄ™kowaÅ„: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    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 4 gości