Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » FAQ по Borland C++ Builder

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Открыть новую тему     Написать ответ в эту тему

Mifonix

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый вечер, не подскажите такая проблема поставил 2009 и началось, когда та же программа работала в 2007 на ура, но не в этом суть, не могу понять как мне перегнать теперь из wchar_t в обычный char:
strcpy(buf_send,Edit1->Text.c_str()) в 2007 работает все на ура, в 2009 вызывает ошибку Cannot convert 'wchar_t*' to 'const char*'
Как решить проблему?

Всего записей: 84 | Зарегистр. 24-12-2006 | Отправлено: 20:22 19-02-2009
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mifonix
Помню, что в первых версиях RS2009 c_str() у UnicodeString возвращал char*, а w_str() соответственно wchar_t*.
Я тогда переводил одну свою старую программу на юникод и это сильно меня напрягало. И думал с какого бодуна они это сделали.
Сейчас заглянул в последнюю справку, теперь оба возвращают wchar_t*, причём я думаю, что w_str() скоро умрёт.
Так что понятно, почему у тебя это не работает. Поэтому есть 2 решения:
1.
UnicodeString s = Edit1->Text;
или
WideString s = Edit1->Text;
 
2.
#include <memory>
 
int Size = Edit1->GetTextLen() + 1;
std::auto_ptr<wchar_t> Buffer(new wchar_t[Size]);
Edit1->GetTextBuf(Buffer.get(),Size);

Всего записей: 2736 | Зарегистр. 16-10-2003 | Отправлено: 22:41 19-02-2009 | Исправлено: Garrett, 22:44 19-02-2009
Kott



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А че WideCharToString - отменили чтоли?
Такое впечатление что только с выходом 2009 версии все только вот и узнали о расширеном наборе символов.

Всего записей: 161 | Зарегистр. 12-12-2003 | Отправлено: 02:35 20-02-2009
Mifonix

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Garrett
Kott

Спасибо за советы решения проблемы!
 
Добавлено:
Оказывается что бы перегнать  в обычный char* в 2009 надо использовать не c_str(), а t_str(), и все работает!!!

Всего записей: 84 | Зарегистр. 24-12-2006 | Отправлено: 23:13 20-02-2009 | Исправлено: Mifonix, 19:18 25-02-2009
Meister_Floh



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Госопда вопрос почти в тему предыдущему..
 
Консольное приложение без vcl, стандартный метод вывода cout << "Какая либо строка": так вот как вывести на консоль эту какую-либо строку в юникоде?

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 19:27 21-02-2009
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Meister_Floh
Юникодные литералы пишутся так: L"Какая либо строка" .

Всего записей: 2736 | Зарегистр. 16-10-2003 | Отправлено: 20:53 21-02-2009
Meister_Floh



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Garrett
 
Сори могет сапсем туп.. Т. е. должно выглядеть вот так: cout << L"Какая либо строка"; ???

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 21:18 21-02-2009
Kott



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Чего мучится то? не проще ли ВЗЯТЬ и ПРОВЕРИТЬ?

Всего записей: 161 | Зарегистр. 12-12-2003 | Отправлено: 21:39 21-02-2009
Meister_Floh



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kott
Да проверил уже.. не работает.. В принципе понял, что для того, чтоб был юникод надо строку делать типа wchar_t* только вот трабла в стандартном ostream описано только cout << const char * .. Вот сижу думаю теперь как бы это его в консоль юникод запихнуть..  
 
Добавлено:
Как я понял вопрос достаточно глобален: Unicode в Console Application в  RAD Studio 2009 -> Русские символы в консоли...

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 22:29 21-02-2009
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Meister_Floh
Надо так, но не знаю, будет работать или нет
wcout << L"Какая либо строка";
Если не поможет, то мучить фасеты, или попробовать как-то по-другому.
 
И если не секрет, зачем тебе юникод в консоли?
Может тебе просто поможет команда chcp?
 
Добавлено:
 
Если вопрос только в том, чтобы увидеть русские буквы в консоли, то надо так
#include <iostream>
#include "windows.h"
 
SetConsoleOutputCP(1251);
std::cout << "Привет\n";
 
Только билдер не может показывать русские буквы в консоли(по крайней мере у меня не выходят). Но при запуске программы из-под ФАРа, ты увидишь разницу между программами с и без SetConsoleOutputCP(1251);
 
Если надо ещё и вводить с консоли в кодировке Windows, то перед cin вызови SetConsoleCP(1251);

Всего записей: 2736 | Зарегистр. 16-10-2003 | Отправлено: 22:39 21-02-2009 | Исправлено: Garrett, 22:44 21-02-2009
Meister_Floh



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Garrett
Ну подвижка вроде есть, но не до конца.. Консоль по умолчанию в висте 866 - вот отсель похоже и траблы и ноги растут.. Руских букв у меня как не было так и нет, но поле для экспериментов огромное
 
Добавлено:
Решилось!! Хотя и решение жутко кривое.. В параметрах компилятора поставил 866 страницу..

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 00:02 22-02-2009
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Meister_Floh
Прочитай мой предыдущий пост до  КОНЦА! Зачем менять настройки компилятора, когда можно вызвать SetConsoleOutputCP(1251); ?

Всего записей: 2736 | Зарегистр. 16-10-2003 | Отправлено: 07:56 22-02-2009
Meister_Floh



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Garrett
Дык прочитал Не работает так.. Хотя может это фича висты а виртуалку xp подымать неохота..

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 10:49 22-02-2009
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Meister_Floh
Ты запускал полученный exe-файл вручную из под командной строки или ФАРа ? (Не из среды).

Всего записей: 2736 | Зарегистр. 16-10-2003 | Отправлено: 14:24 22-02-2009
Meister_Floh



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Garrett
totalcommander->cmd->project1
 
С заменой кодовой страницы для острим на 1251 - крякозяблы как в выводе строки так и в кирилистических именах директорий
 
С компиляцией с кодовой страницей 866 - все гут..
 
Кстати твоя идея с wcout << L"Tnglish string" << "Русская строка"
 вывод в юникоде, но.. ангельская строка читабельна, кирилистическая со знаками вопроса.. Таким образом сделал предположение, что консоль висты НЕ ПОДДЕРЖИВАЕТ юникод.. В чем и убедился, когда посмотрел по GetConsoleCP() кодовую страницу, она оказалась как уже понятно 866...

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 15:17 22-02-2009
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Meister_Floh
У меня под ХР кодовая страница меняется. Запускал файл ФАРом. На Висту многие вешают все смертные грехи, но я с ней работал немного, основная претензия - медлительность, всё другое у меня работало как и в ХР.
Я надеюсь, что когда ты компилировал с SetConsoleOutputCP(1251); ты в настройках компилятора отключал свои 866 ?

Всего записей: 2736 | Зарегистр. 16-10-2003 | Отправлено: 17:50 22-02-2009
Meister_Floh



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Garrett
Само собой отключал.. Кстати заметил фичу, если раз проставил кодовую страницу, потому убрать ее на пустую строку удается, только при помощи .opset, в котором эта опция пустая

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 20:27 22-02-2009
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Meister_Floh
У меня и у сотрудников к сожалению нет Висты, чтобы проверить самому... Завтра попробую на Вин2003, но думаю, что и там всё будет ОК. И еще киньте мне в ПМ свой мейл, я соберу 2 ехе-файла и вышлю сегодня или завтра вам, попробуете мои файлы на своей висте.

Всего записей: 2736 | Зарегистр. 16-10-2003 | Отправлено: 21:58 22-02-2009
Meister_Floh



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Garrett
а я в ответ свой исходник Вам кину..

Всего записей: 393 | Зарегистр. 04-08-2003 | Отправлено: 22:13 22-02-2009
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Meister_Floh
Послал.

Всего записей: 2736 | Зарегистр. 16-10-2003 | Отправлено: 23:23 22-02-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » FAQ по Borland C++ Builder


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru