|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.09.2020, 10:17 | #1 |
Пользователь
Регистрация: 07.04.2016
Сообщений: 16
|
Миграция проектов bp BCB6 в Cbuilder 10.3
Пришлось сменить свой старый комп с WinXP на новый с Win10 - ничто не вечно.
Но сохранились нужные старые проекты в Borland C++ Builder 6, которые надо поддерживать и развивать. Поставил RAD Studio 10.3, которая принимает форматы старого С++Builder-a. Но "старые проекты" - это работа (коммуникация) с действующим оборудованием через терминальный канал в Ascii формате и интерфейс пользователя / конфигуратор. Работа через терминал - это синтаксический разбор 8-битных строк (поиск/замена/извлечение данных) и посылка команд / прием диагностических сообщений. В проектах все строки обозначены как AnsiString, вроде бы формально (?) поддерживаемые в новой среде разработки. Поскольку новый CBuilder базирован изначально на универсальных широких символах UnicodeString, возникает неоднозначный философско-методический вопрос: как совместить обработку терминальных строк с общей кодировкой символов в проекте (которая в опциях проекта изначально обозначена как wchar_t) с формированием и синтаксическим разбором терминальных посылок? Более конкретно: 1. Надо ли весь проект перевести с wcahr_t на char, изменив опцию проекта? К каким последствиям это приведет (включая работу с контролами Vcl в интерфейсе и структурами/функциями WinAPI)? 2. В проекте широко использовались приемы работы с буфером терминала через указатели, типа: AnsiString ss = ''Error"; SendBuffer(ss.c_str()); или: AnsiString ss = (AnsiStrig(ReadBuffer)); Какая им корректная альтернатива в новой платформе? Вроде AnsiString уже не класс, а просто структура. 3. Какими функциями можно корректно сливать протоколы из терминала в файл, чтобы этот текст корректно читался в стандартных инструментах и наоборот: из файла копировался в терминал? Пока ковыряюсь в бездонных справках по новой платформе. Но может, кто-то уже ходил этой дорогой? Буду признателен за полезный опыт. |
22.09.2020, 09:24 | #2 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
поздравляю с выходом из пещер
а тут сочувствую а тут не понимаю лучше новое делать на Qt, например |
22.09.2020, 09:29 | #3 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
1 - wchar_t, std::wstring - всё это есть в языке C++
2 - замени на std::wstring или std::string , что больше подойдёт. К слову, класс сейчас ничем не отличается от структуры 3 - что имеется в виду, какой-то абстрактный вопрос. Есть классы для работы с файлами ifstream/ofstream, например |
22.09.2020, 10:52 | #4 | |
Пользователь
Регистрация: 07.04.2016
Сообщений: 16
|
Цитата:
По поводу развития: тестовая система довольно многослойная, с поддержкой большой номенклатуры разных изделий, и воспроизведение "с нуля" слишком затратно. А добавить путем копи-паста поддержку новой модификации изделия с небольшой корректировкой - это полчаса делов. По поводу пп.3: меня затрудняет назначить в новой платформе корректный тип для переменных, обслуживающих терминальный буфер с 8-битными символами ASCII так, чтобы можно было схожими со старыми методами воспроизвести кухню синтаксического разбора этих переменных. Т.е. поиск символов и ключевых слов, копирование их из такой переменной в другую, и из байтового буфера в строку и обратно в байтовый буфер. Раньше я пользовался функцией класса AnsiString.c_ptr() для записи в буфер, и простым конструктором класса AnsiStr(*pchar) для обратного преобразования. А теперь как? Мне не совсем ясно: как такие 8-битные ASCII строки я должен соединять с строками (как я понимаю w_char) в оконных контролах для отображения. Делает это компилятор автоматически, или надо применять некие конверторы типов? Пока вот такие грабли... |
|
22.09.2020, 11:24 | #5 |
фрилансер
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,010
|
можно сначала в старом проекте в старой IDE переделать и оттестить - заменить использование AnsiString на одно из (по ситуации):
char, char*, std::vector<char>, wchar_t, wchar_t*, std:vector<wchar_t>, std::string, std::wstring у string есть метод c_str() для "константного" доступа к началу строки перекодировка средствами винапи MultiByteToWideChar , WideCharToMultiByte после чего переносить в новую IDE уже без встроенных строк, а используя стандартные контейнеры или указатели поддержка старья будет ещё затратнее, только понятно это станет года через 2 (при том, что новое можно сделать менее, чем за год, причём учитывая опыт старого проекта и не допуская старые ошибки). Новый проект можно делать параллельно, чтобы не прерывать работу |
22.09.2020, 12:44 | #6 | |
Пользователь
Регистрация: 07.04.2016
Сообщений: 16
|
Цитата:
То что Вы говорите - очевидно. Это хорошо, когда есть ресурсы свободного времени. А у меня чаще всего нужно "вчера". :-(. И больших новых проектов у меня тоже выше крыши. Поэтому тратить время на фигню, типа подключить тест для еще одного аналогичного устройства мне дешевле. Тем более что система умрет сама, когда прекратится производство этого "старья". Немного стало понятнее "куда бежать". Как говорится, дорогу осилит идущий... :-) |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Кто-нибудь скиньте bcb6.hlp (файл справки) | mymedia | C++ Builder | 2 | 27.03.2012 19:58 |
B-сплайны в CBuilder | spliner | Помощь студентам | 0 | 20.11.2010 14:12 |
База данных на BCB6 | Nick36 | Общие вопросы C/C++ | 0 | 16.12.2009 19:29 |
SpinEdit и CBuilder | Gromsky | Общие вопросы C/C++ | 0 | 14.05.2009 20:47 |
Многопоточность в BCB6 | Linky | Общие вопросы C/C++ | 1 | 06.02.2009 10:44 |