Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2020, 10:17   #1
PAG
Пользователь
 
Регистрация: 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. Какими функциями можно корректно сливать протоколы из терминала в файл, чтобы этот текст корректно читался в стандартных инструментах и наоборот: из файла копировался в терминал?

Пока ковыряюсь в бездонных справках по новой платформе.
Но может, кто-то уже ходил этой дорогой?
Буду признателен за полезный опыт.
PAG вне форума Ответить с цитированием
Старый 22.09.2020, 09:24   #2
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Цитата:
Сообщение от PAG Посмотреть сообщение
WinXP на новый с Win10
поздравляю с выходом из пещер

Цитата:
Сообщение от PAG Посмотреть сообщение
Borland C++ Builder 6, которые надо поддерживать
а тут сочувствую

Цитата:
Сообщение от PAG Посмотреть сообщение
развивать
а тут не понимаю

лучше новое делать на Qt, например
Алексей1153 вне форума Ответить с цитированием
Старый 22.09.2020, 09:29   #3
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

1 - wchar_t, std::wstring - всё это есть в языке C++

2 - замени на std::wstring или std::string , что больше подойдёт. К слову, класс сейчас ничем не отличается от структуры

3 - что имеется в виду, какой-то абстрактный вопрос. Есть классы для работы с файлами ifstream/ofstream, например
Алексей1153 вне форума Ответить с цитированием
Старый 22.09.2020, 10:52   #4
PAG
Пользователь
 
Регистрация: 07.04.2016
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
1 - wchar_t, std::wstring - всё это есть в языке C++
3 - что имеется в виду, какой-то абстрактный вопрос. Есть классы для работы с файлами ifstream/ofstream, например
Спасибо за комент.
По поводу развития: тестовая система довольно многослойная, с поддержкой большой номенклатуры разных изделий, и воспроизведение "с нуля" слишком затратно. А добавить путем копи-паста поддержку новой модификации изделия с небольшой корректировкой - это полчаса делов.

По поводу пп.3: меня затрудняет назначить в новой платформе корректный тип для переменных, обслуживающих терминальный буфер с 8-битными символами ASCII так, чтобы можно было схожими со старыми методами воспроизвести кухню синтаксического разбора этих переменных.
Т.е. поиск символов и ключевых слов, копирование их из такой переменной в другую, и из байтового буфера в строку и обратно в байтовый буфер. Раньше я пользовался функцией класса AnsiString.c_ptr() для записи в буфер, и простым конструктором класса AnsiStr(*pchar) для обратного преобразования. А теперь как?
Мне не совсем ясно: как такие 8-битные ASCII строки я должен соединять с строками (как я понимаю w_char) в оконных контролах для отображения. Делает это компилятор автоматически, или надо применять некие конверторы типов?
Пока вот такие грабли...
PAG вне форума Ответить с цитированием
Старый 22.09.2020, 11:24   #5
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

можно сначала в старом проекте в старой 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 уже без встроенных строк, а используя стандартные контейнеры или указатели

Цитата:
Сообщение от PAG Посмотреть сообщение
воспроизведение "с нуля" слишком затратно.
поддержка старья будет ещё затратнее, только понятно это станет года через 2 (при том, что новое можно сделать менее, чем за год, причём учитывая опыт старого проекта и не допуская старые ошибки). Новый проект можно делать параллельно, чтобы не прерывать работу
Алексей1153 вне форума Ответить с цитированием
Старый 22.09.2020, 12:44   #6
PAG
Пользователь
 
Регистрация: 07.04.2016
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
поддержка старья будет ещё затратнее, только понятно это станет года через 2 (при том, что новое можно сделать менее, чем за год, причём учитывая опыт старого проекта и не допуская старые ошибки). Новый проект можно делать параллельно, чтобы не прерывать работу
Спасибо, Алексей.
То что Вы говорите - очевидно. Это хорошо, когда есть ресурсы свободного времени.
А у меня чаще всего нужно "вчера". :-(.
И больших новых проектов у меня тоже выше крыши. Поэтому тратить время на фигню, типа подключить тест для еще одного аналогичного устройства мне дешевле.
Тем более что система умрет сама, когда прекратится производство этого "старья".
Немного стало понятнее "куда бежать".
Как говорится, дорогу осилит идущий... :-)
PAG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто-нибудь скиньте 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