Ви використовуєте застарілий браузер. Цей та інші сайти можуть відображатися в ньому некоректно. Необхідно оновити браузер або спробувати використовувати https://www.google.com/chrome/
Вот жеж блин... ПРограммисты так сказать... Куда в АДО или ОДБЦ лезть если не освоил основ языка и платформы, да еще и в МСДН забанен?
Если собераешься поддерживать более одного языка, забуть о типе чар, а лучше забудь о нем до конца жизни, ну по крайней мере до того времени как в СП не начнет на постоянной основе применяться УТФ-8
И в C++ есть.
std::base_string<> и специализации:
1) Для char - std::string
2) Для wchar_t - std::wstring
Для получения C-строки используем метод c_str(), длины строки size() или length()
Аналогично в ATL есть ATL::CStringT и специализации
1) Для char - ATL::CString
2) Для wchar_t - ATL::CStringW
Для получения C-строки предусмотрен оператор преобразования в соотв. тип, т.е вместо сишной строки можно использовать экземпляр CStringT напрямую.
И в C++ есть.
std::base_string<> и специализации:
1) Для char - std::string
2) Для wchar_t - std::wstring
Для получения C-строки используем метод c_str(), длины строки size() или length()
Аналогично в ATL есть ATL::CStringT и специализации
1) Для char - ATL::CString
2) Для wchar_t - ATL::CStringW
Для получения C-строки предусмотрен оператор преобразования в соотв. тип, т.е вместо сишной строки можно использовать экземпляр CStringT напрямую.
спасибо, коллега. C++ какбе тоже нормальный язык.
в VCL (C++ Builder / Delphi) есть аналоги под названием UnicodeString и AnsiString и еще много разных стрингов.
Колега вы наверное удивитесь узнав о том, что даже С++ имеет весьма неширокое распространение среди СП кода. В основном это чистый Си Во вторых в отличии от паскаля в С++ нету нативного стрингового типа, соответственно знание что такое ВЧарТ минимум необходимо для программиста на С++. Более того ТС задал вопрос в области в которой стл малоприменима, а АЛТ (ВТЛ) неподходит по ТЗ
та не, ну понятно, что Микрософт и другие обстоятельства принуждают к извращенному сексу с LPSTR, BSTR, BDSMSTR, но так ли сладки утехи с ними без физического принуждения?
По качану Разберись что такое char, а что такое wchar_t непоняв этого не поймешь сути работы с АПИ если быть кратким то чар в вайд чар перегоняеться не приведением типов а MultiByteToWideChar. Как ее применять прочтешь в МСДН. Но советую для начала понять смісл и разницу.
По качану Разберись что такое char, а что такое wchar_t непоняв этого не поймешь сути работы с АПИ если быть кратким то чар в вайд чар перегоняеться не приведением типов а MultiByteToWideChar. Как ее применять прочтешь в МСДН. Но советую для начала понять смісл и разницу.
Я сомневаюсь, что TCу в данной ситуации что-то нужно куда-то перегонять. Понять разницу char / wide char - да, это полезно. А дальше, по-моему, следует использовать TCHAR и родственные типы/функции, пока не окажется, что где-то нужно явно работать и с ANSI, и с Unicode одновременно, что бывает, по-моему, редко.
char str1[50], *lpstr1; // Явно указан многобайтный тип (char)
lpstr1=str1; // Зачем это присвоение?
GetWindowTextA(hWndEdit,lpstr1,50); // Явно вызываешь многобайтную функцию (т.е. для типа char)
ListView_SetItemText(ListE,2,2,(LPWSTR)lpstr1); // А вот тут ты явно приводишь указатели
// но строки то не преобразовываются!
// Или используй MultibyteToWideChar() или, что более правильно,
// используй строки типа TCHAR[] или CString.
У тебя
Код:
VOID ListView_SetItemText(
HWND hwnd,
int i,
int iSubItem,
LPCTSTR pszText
);
разворачивается препроцессором в
Код:
VOID ListView_SetItemText(
HWND hwnd,
int i,
int iSubItem,
wchar_t * pszText
);
Я сомневаюсь, что TCу в данной ситуации что-то нужно куда-то перегонять. Понять разницу char / wide char - да, это полезно. А дальше, по-моему, следует использовать TCHAR и родственные типы/функции, пока не окажется, что где-то нужно явно работать и с ANSI, и с Unicode одновременно, что бывает, по-моему, редко.
Ну дык я и не спорю собственно Он спросил почему неработает, я написал почему и как приводить.
Здаеться мне вся проблема в том, что 50% преподователей в вузах вообще не знаю что такое wchar_t, 20% слышали о нем, но как использовать не знают, еще 20% знают о нем. но уверены что многоязыковая поддержка для десктопных приложений это зло, и зря народ вбохал кучу бабок в разработку юникодных ядер, ну и 10% адекватных...
Так вот, ТС, если ты не хочешь заморачиваться на мелкософтовские штучки, пиши так:
Предварительно зайдя в свойства проекта, открыв вкладку General в пункте Character Set выбери Use Multi-Byte Character Set вместо Use Unicode Character Set и будет тебя счастье, во втором случае кстати будет работать и вышеприведеный вариант в мелкософтовском стиле.
Ну а вообще разберись чем char отличаеться от wchar_t в принципе и в рамках представления в памяти на Литл Ендиан машинах, что происходить при тупом каставании и НЕ ЗАДАВАЙ ГЛУПЫХ ВОПРОСОВ
Славик, у тебя баг Препроцессором разворачиваеться в
Код:
VOID ListView_SetItemText[B]W[/B](
HWND hwnd,
int i,
int iSubItem,
wchar_t * pszText
);
Использую функцию MultibyteToWideChar, для этого подключаю то что пишет в МСДН:
Header Winnls.h (include Windows.h)
Library Kernel32.lib
DLL Kernel32.dll
Использую функцию MultibyteToWideChar, для этого подключаю то что пишет в МСДН:
Header Winnls.h (include Windows.h)
Library Kernel32.lib
DLL Kernel32.dll
MultibyteToWideChar нужна дле приведения чар к вчар. Только тебе как бі пітаються все обїяснить что єтого тебе не надо Заметь все явно неглупіе люди которіе педалят уже не первій год Учись все делать не так как препод недоучка рассказал на лекции и как он хочет, а как надо и как єто тебе в будущем пригодиться в жизни
Ну если ті очень настаиваешь, то в стандартном вин32 консоль апликейшен необходимо лишь Windows.h что бі получить доступ к єтой функции. Если у тебя его нет, значит проблемі в настройках твоего проекта. И что значит не видеть? А точнее кто не видеть линкер или компилятор и с каким сообщением об ошибке?