Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249

Ошибка - Cannot convert 'wchar_t *' to 'const char *'

05.10.2015, 10:58. Показов 2637. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В событии компонента TStringGrid OnDrawCell перерисовываю ячейки. Текст вывожу так:
C++
1
DrawText(Canvas->Handle, Cells[ACol][ARow].t_str(), Cells[ACol][ARow].Length(), &ARect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
Компилятор ругается:
[bcc32 Error] MyStringGrid.cpp(89): E2034 Cannot convert 'wchar_t *' to 'const char *'
Любопытно, что раньше эта функция работала в таком виде, а сейчас (я делаю свой компонент на базе TStringGrid) - нет.

Нашел в интернете вот такое решение:
C++
1
2
3
4
5
6
7
char mbstring[256];
    wcstombs(mbstring, Cells[ACol][ARow].c_str(), 256);
    char *dmbstring;
    dmbstring = new char[Cells[ACol][ARow].Length() + 1];
    wcstombs(dmbstring, Cells[ACol][ARow].c_str(), Cells[ACol][ARow].Length() + 1);
    delete [] dmbstring;
    DrawText(Canvas->Handle, dmbstring, Cells[ACol][ARow].Length(), &ARect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
Оно работает, но выглядит как-то громоздко. Нет ли решения проще?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.10.2015, 10:58
Ответы с готовыми решениями:

Ошибка E2034: Cannot convert 'char const[8]' to 'const wchar_t *'
Прошу прощения за свой вопрос, но я никак не пойму где ошибка? использую c++ builder 10 (если это как то связано) выдает следующие...

Ошибка: E2034 Cannot convert 'char const[51]' to 'const wchar_t *
Пытаюсь добавить в memo1 название файлов располагающихся в каталоге, в Console Application все отлично, а тут проблема. ...

MessageBox - Cannot convert 'wchar_t const[45]' to 'const char *'
Добро всем! :senor: MessageBox(NULL,(LPCWSTR)L"Данные не сохранены ! \nЗакрыть не сохранив ?", (LPCWSTR)L"Мое супер...

16
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
05.10.2015, 11:30
Цитата Сообщение от Нитонисе Посмотреть сообщение
Нет ли решения проще?
а просто использовать c_str() ?

C++
1
DrawText(Canvas->Handle, Cells[ACol][ARow].c_str(), Cells[ACol][ARow].Length(), &ARect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
0
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
05.10.2015, 11:39  [ТС]
Цитата Сообщение от _Dimon_ Посмотреть сообщение
а просто использовать c_str() ?
Компилятор выдает такую же ошибку.
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
05.10.2015, 11:43
Нитонисе, какая версия билдера?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,895
Записей в блоге: 11
05.10.2015, 11:46
А просто заменить DrawText на DrawTextW, чтобы функция работала именно с wchar_t* - совсем не вариант?

Добавлено через 1 минуту
Цитата Сообщение от _Dimon_ Посмотреть сообщение
какая версия билдера?
Это не главное. Главное - во что в этой версии выставлено значение _TCHAR maps to, если в wchar_t - то ошибки в принципе не будет.
1
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
05.10.2015, 11:57  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
А просто заменить DrawText на DrawTextW, чтобы функция работала именно с wchar_t* - совсем не вариант?
Да, так работает. Только что-то с текстом не то - см. картинку (набран текст "12345"). Кстати и с моим громоздким вариантом такой же текст, я просто сразу не заметил.
Изображения
 
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,895
Записей в блоге: 11
05.10.2015, 12:06
Все-таки, какой Билдер и что выставлено в той настройке, о которой я написал выше? Проверил у себя - нормально рисует (только у меня все исходники сохранены в UTF8)
0
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
05.10.2015, 12:10  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Все-таки, какой Билдер и что выставлено в той настройке, о которой я написал выше?
Builder XE8, а где эта настройка "_TCHAR maps to"?
0
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
05.10.2015, 12:11  [ТС]
Нашел, стояло так:
Миниатюры
Ошибка - Cannot convert 'wchar_t *' to 'const char *'  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,895
Записей в блоге: 11
05.10.2015, 12:14
Project > Options > C++ (Shared Options)

Добавлено через 53 секунды
XE8 в глаза не видел, поэтому что там творится - не знаю. В XE2 нормально работает.
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
05.10.2015, 12:15
В XE7 тоже все нормально.
0
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
05.10.2015, 12:21  [ТС]
Сохранил исходник в UTF8 - стало нормально.
0
05.10.2015, 20:47

Не по теме:

Цитата Сообщение от Нитонисе Посмотреть сообщение
Сохранил исходник в UTF8 - стало нормально.
у меня в анси исходник, но работает в хе7.....

похожая ошибка у меня могла быть в 2009, 2010, но у тебя XE8 .....

0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,895
Записей в блоге: 11
05.10.2015, 20:54
Неважно, в какой версии начиная с 2009. Среда Юникодная - всё рассчитано на то, что исходник сохраняется в UTF8 (и это логичнее, чем сохранять его в ANSI). Я твержу об этом уже несколько лет (сохраняйте исходники в UTF8, проверяйте работу программы на системе, где НЕюникодная кодировка не совпадает с русской), нет, блин, экономят они байты - сохраняют в ANSI, и получают либо отказ компилироваться, либо компилируется нормально, но потом, при запуске - кракозябры (из-за несовпадения кодировок) у пользователей с другими настройками ОС.
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
05.10.2015, 21:04
volvo, дело в том, что когда вышла первая юникодная версия (2009), там тоже не было все гладко...
а про то, что бы сразу все проекты, каждый файлик, перевести в утф ....
0
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
05.10.2015, 21:22  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
нет, блин, экономят они байты - сохраняют в ANSI
Ну лично я этим просто никогда не заморачивался, а по умолчанию стоит ANSI.
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
05.10.2015, 21:27
я уже в новых проектах ставлю UTF8, а в старых как было так и осталось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.10.2015, 21:27
Помогаю со студенческими работами здесь

Cannot convert 'wchar_t *' to 'const char *'
strcpy(vPass.Login, StringGrid1->Cells.c_str()); Unit1.cpp(105): E2034 Cannot convert 'wchar_t *' to 'const char *' Full parser...

Cannot convert 'wchar_t *' to 'const char *'
Этот код работает в старом приложении а в новом не хочет... void KillProcess(int id) { HANDLE ps = OpenProcess(1, false, id); ...

Cannot convert 'wchar_t *' to 'const char *'
Перешол с 2010 билдера на XE7 и тут глюки. ...

Cannot convert 'wchar_t *' to 'const char *'
Доброго времени суток. Перешелс 2010 билдера на XE... и тут ошибки. Имеется структура стороннего дат файла. struct sWeapon ...

Cannot convert wchar_t to const char ERROR
Понимаю, что тема изъезженная, но тем не менее требуется совет. В силу технического прогресса я перешел таки с 7 винды на 10-ю и столкнулся...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
ПЛИС
zxcha1ka_ 27.01.2026
AHDL Разработать программы для синтеза следующих устройств: 1. Параллельного регистра 4-х разрядного с синхронной загрузкой и асинхронным сбросом (обнулением); Пoмoгитe пoжaлyйстa
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru