Из Borland в EmbarCadero... не работает MessageBox?
На самом деле, MessageBox тут не при чём, причина в другом.
Например, если в проекте Borland C++ Builder 6 или иного старого продукта было
void mathErrorMsg (EMathError *E) { AnsiString S = "Ошибка вычислений: "; if (E->Message == "EZeroDivide") S += "деление на нуль"; else if (E->Message == "EOverflow") S += "переполнение"; else if (E->Message == "EInvalidArgument") S += "недопустимое число"; Application->MessageBox(S.c_str(), "Повторите ввод", MB_OK); }
то в новом (2014 г.) C++ Builder XE6 от Embarcadero проще всего написать
void mathErrorMsg (EMathError *E) { String S = "Ошибка вычислений:\n"+E->Message; Application->MessageBox(S.c_str(), L"Повторите ввод", MB_OK); }
Обратите внимание на "L
" перед строковой константой, это означает, что строка в Юникоде. Ну и лень было переводить сообщения E->Message
, их значения изменились. Тем не менее, это будет компилироваться без ошибок вроде E2034 Cannot convert 'wchar_t *' to 'char *'
...
Или было:
Application->MessageBox("Неверные значения данных!","Повторите ввод",MB_OK);
Для работы кода в новых компиляторах достаточно:
Application->MessageBox(L"Неверные значения данных!",L"Повторите ввод",MB_OK);
Заморочки со строками связаны со всё той же причиной - некогда (в до-Юникодную эпоху) имевшей место однобайтовостью строк по умолчанию.
01.09.2014, 17:44 [12728 просмотров]