Wat niet kan is nog nooit gebeurd
En bij expliciet casten naar char* ?
* Orphix heeft nooit echt met wchars gewerkt
code:
1
| serverInfo.pwszName = static_cast<char*>(CString("Localhost")); |
* Orphix heeft nooit echt met wchars gewerkt
CString bla = _T("localhost");
serverInfo.pwszName = (LPWSTR)bla.GetBuffer(bla.GetLength());
bla.ReleaseBuffer(-1);
Eigenlijk moet je even de buffer kopieren, maar daaar had ik geen zin in...
serverInfo.pwszName = (LPWSTR)bla.GetBuffer(bla.GetLength());
bla.ReleaseBuffer(-1);
Eigenlijk moet je even de buffer kopieren, maar daaar had ik geen zin in...
Hoe gebruik ik dan die _T macro vanuit een tekst veld ?
Ik gebruik een member variabele voor een tekst veld en deze heeft als type dus een CString. Wanneer de gebruiker op een knop klikt wil in de servernaam op ipadres gebruiken in die server structuur.
Wat is het nut van de _T macro ?
en hoe pas ik die dynamisch toe ?
Ik gebruik een member variabele voor een tekst veld en deze heeft als type dus een CString. Wanneer de gebruiker op een knop klikt wil in de servernaam op ipadres gebruiken in die server structuur.
Wat is het nut van de _T macro ?
en hoe pas ik die dynamisch toe ?
Wat niet kan is nog nooit gebeurd
_T is natuurlijk TCHAR...
Het werkt !
Nu nog even uitzoeken hoe ik de buffer netjes kopieer.
Wat is hier verkeerd aan ????
Het werkt !
code:
1
2
| serverInfo.pwszName =(LPWSTR)m_ServerNameIP.GetBuffer(m_ServerNameIP.GetLength());
m_ServerNameIP.ReleaseBuffer(-1); |
Nu nog even uitzoeken hoe ik de buffer netjes kopieer.
code:
1
2
3
4
| LPTSTR lpsz = new TCHAR[m_ServerNameIP.GetLength()+1];
_tcscpy(lpsz,m_ServerNameIP);
serverInfo.pwszName =(LPWSTR)lpsz; |
Wat is hier verkeerd aan ????
Wat niet kan is nog nooit gebeurd
DCOM server betekent waarschijnlijk dat je op NT werkt - daar zijn alle TextBoxes standaard Unicode (=wide). Kun je de wide string niet gewoon in z'n originele vorm krijgen ipv narrowed? Dan hoef je 'm niet eens te converteren.Op vrijdag 21 december 2001 02:24 schreef Nexopheus het volgende:
Goed, wellicht vast wel ergens bekent maar zoek tocht leverd niets op. (is ook al laat, wellicht kijk ik er overheen).
In wil graag van een CString (uit een textveld) een pwsz maken, voor in een COSERVERINFO structuur.
Zodat ik de DCOM server variabel kan zetten.
Dit lukt me echter niet...
De naam hard-coden als
code:
1 serverInfo.pwszName = L"Localhost";
heeft zo z'n beperkingen.
Iemand een idee?
BvD
Overigens ga je het met casts niet redden, ben ik bang. Je kunt wel een char naar wchar_t casten, maar dan krijg je iha niet hetzelfde karakter. Bovendien kun je al helemaal geen char* naar wchat_t* casten; dan is je string niet eens meer terminated : je hebt 16 0-bits nodig om een wchar_t string te terminaten en een char* heeft er maar 8 op het eind.
De meest veilige manier is via std::string / std::wstring; die hebben daarvoor ingebouwde voorzieningen. std::string kun je direct met CString.c_str() initialiseren, en std::wstring.c_str() geeft je een pwsz (wchar_t*). Alleen het stukje string->wstring weet ik effe niet hoe dat moet.
Je zou [url="http://news:comp.lang.c++.moderated"]news:comp.lang.c++.moderated[/url] kunnen proberen - daar zitten de gurus die dat soort dingen weten.
Wel effe duidelijk melden wat je precies wil hebben.
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein
De oplossing die The End heeft aangedragen werkt wel.
Moet alleen nog even de buffer goed kopieeren.
mmm die usenet group zal maar eens goed gaan doorspitten..
Moet alleen nog even de buffer goed kopieeren.
mmm die usenet group zal maar eens goed gaan doorspitten..
Wat niet kan is nog nooit gebeurd
Je kan als alles in UNICODE is kopieren met wcscpy.
char *gekopieerdestring = new char[bla.GetLenght()];
wcstombs(gekopieerdestring,bla.GetBuffer(bla.GetLenght()),bla.GetLenght());
Op deze manier hoef je hem niet meer te typecasten...
wcstombs(gekopieerdestring,bla.GetBuffer(bla.GetLenght()),bla.GetLenght());
Op deze manier hoef je hem niet meer te typecasten...
Dit is niet echt waar... Over het algemeen kan je zonder problemen wchars casten naar chars en andersom. '\0' is voor char en wchar hetzelfde.Op vrijdag 21 december 2001 11:06 schreef MSalters het volgende:
[..]
[knip]
Overigens ga je het met casts niet redden, ben ik bang. Je kunt wel een char naar wchar_t casten, maar dan krijg je iha niet hetzelfde karakter. Bovendien kun je al helemaal geen char* naar wchat_t* casten; dan is je string niet eens meer terminated : je hebt 16 0-bits nodig om een wchar_t string te terminaten en een char* heeft er maar 8 op het eind.
[/knip]
Perfect dit zocht ik!Op vrijdag 21 december 2001 15:46 schreef The End het volgende:
char *gekopieerdestring = new char[bla.GetLenght()];
wcstombs(gekopieerdestring,bla.GetBuffer(bla.GetLenght()),bla.GetLenght());
Op deze manier hoef je hem niet meer te typecasten...
Wat niet kan is nog nooit gebeurd
Jullie zagen deze:
over het hoofd !WideCharToMultiByte / MultiByteToWideChar ?
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Pagina: 1