Конвертирование из C++
|
|
sashasold | Дата: Суббота, 03.06.2023, 03:00 | Сообщение # 1 |
Лейтенант
Группа: Пользователи
Сообщений: 41
Статус: Offline
| Кто знает синтаксис С? Хотел перевести заголовки библиотеки, на читаемый язык (С не читаю)
Перевел type, enum А вот это не могу разобрать "template <class vers>"
|
|
| |
zamabuvaraeu | Дата: Суббота, 03.06.2023, 06:47 | Сообщение # 2 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: Offline
| "template <class vers>"
|
|
| |
sashasold | Дата: Суббота, 03.06.2023, 14:17 | Сообщение # 3 |
Лейтенант
Группа: Пользователи
Сообщений: 41
Статус: Offline
| А ты в fb пробовал напечатать?)
|
|
| |
zamabuvaraeu | Дата: Понедельник, 05.06.2023, 18:44 | Сообщение # 4 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: Offline
| Форум съел сообщение.
1. Не путайте Си и Си++. Это разные языки программирования, и общего между ними только то, что в конце строки нужно точку с запятой ставить.
2. Во Фрибесике нет шаблонов. В Си тоже нет шаблонов.
3. Все ключевые слова class, struct и template на Фрибейсик транслируются как Type. Угловые скобки при этом удаляем.
|
|
| |
sashasold | Дата: Суббота, 10.06.2023, 22:43 | Сообщение # 5 |
Лейтенант
Группа: Пользователи
Сообщений: 41
Статус: Offline
| Вообще думал когда писал про перекодировку с C++, что в меня за незнание такого пальцами затыкают, как так мол не знает. И будут спорить как лучше перевести, а тут тишинааа.. Часть кода смог перевести достаточно легко, а часть никак не получается
Например // комментарий, переводим как ' . Более эстетично я считаю Struct xxx { } Переводим как Type xxx End type
Enum { } Перевод Enum ... End EnumДобавлено (10.06.2023, 22:53) --------------------------------------------- Функции на Си шиворот на выворот обьявляются сначала возвращаемый тип потом имя функции. Перестраиваем как нам надо
(0x200) - шеснадцатеричная запись Перевод &h200 тоже получше на FB
А вот что никак не получается Виртуальные Функции в типах Struct xxx { Virtual as bool winapi readdata(io_request_sbapi * const readrequest) = 0 }
И шаблоны функций Template <class VersionType> Помогите кто может!! Ауу Если не сможем так перевести код, может кто возьмется перевести Платно? Там 2 небольших файла с заголовками. Очень надо
|
|
| |
zamabuvaraeu | Дата: Воскресенье, 11.06.2023, 13:33 | Сообщение # 6 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: Offline
| Покажите исходники что надо перевести.
|
|
| |
sashasold | Дата: Среда, 14.06.2023, 15:27 | Сообщение # 7 |
Лейтенант
Группа: Пользователи
Сообщений: 41
Статус: Offline
| Вот исходники
https://disk.yandex.ru/d/6KHXxrTwPaophQ
(Файлы в сообщения не прикрепляет не ".h" не "zip" формат, только изображения)
Посмотрите кто сможет!
Сообщение отредактировал sashasold - Среда, 14.06.2023, 15:36 |
|
| |
haav | Дата: Среда, 14.06.2023, 16:29 | Сообщение # 8 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: Offline
| Я то думал , там что-то серьезное в виде классов и их шаблонов... А тут примитивный макрос сделает свое дело.
Можно примерно так:
Код '// информация о микроконтроллере #macro MCU_INFO_LUSBAPI(mType) type MCU_INFO_LUSBAPI##mType as LOng Active '// флаг достоверности остальных полей структуры as BYTE Name_(NAME_LINE_LENGTH_LUSBAPI) '// название микроконтроллера as double ClockRate '// тактовая частота работы микроконтроллера в кГц '// VERSION_INFO_LUSBAPI Version; // информация о версии прошивки микроконтроллера as mType Version '// информация о версии как самой прошивки микроконтроллера, так, возможно, и прошивки 'Загрузчика' as BYTE Comment(COMMENT_LINE_LENGTH_LUSBAPI) '// строка комментария end type #endmacro
При реальном использовании кода , надо будет ввести тип , что-то типа так: (для 2 разных шаблонов с Integer и Double):
Код MCU_INFO_LUSBAPI(integer) MCU_INFO_LUSBAPI(double)
В итоге создадутся 2 разных типа с Integer и Double , вот такие: MCU_INFO_LUSBAPIinteger MCU_INFO_LUSBAPIdouble
Ну и тип для переменных нужно будет задавать , исходя из заданного шаблона. То есть , если задашь с типом Integer , то писать нужно будет так:
dim p as MCU_INFO_LUSBAPIinteger
-------------------
Что касается виртуальных методов , то тут примерно так я думаю:
Код type ILUSBBASE extends object '// функции общего назначения для работы с USB устройствами 'virtual BOOL WINAPI OpenLDevice(WORD VirtualSlot) = 0; Declare Virtual function OpenLDevice( VirtualSlot as short) as long '------- '------- end type
function ILUSBBASE.OpenLDevice(VirtualSlot as short) as long return 0 End Function
То есть , для каждого виртуального описываемого метода , надо писать что-то типа заглушки (чисто виртуальный метод). В С++ достаточно для описания такого присвоить методу нуль. Надеюсь , я не ошибся и дал правильный совет. Ну или писать вручную всю реализацию , как это делает zamabuvaraeu. Можешь почитать его статьи про ООП , там он разжевывает , как это работает.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
sashasold | Дата: Четверг, 15.06.2023, 00:43 | Сообщение # 9 |
Лейтенант
Группа: Пользователи
Сообщений: 41
Статус: Offline
| Ну буду пробовать тогда сам допереводить, процентов 80 перевел то, но вот эти виртуальные методы, не пользовался ими раньше, да и шаюлонами. Хотя не прием подпрограмм например с double и передачи числа integer вызывал ошибку и жутко раздражал, какая блин разница, числл и число. Тут шаблоны наверно и придумали люди
|
|
| |
zamabuvaraeu | Дата: Четверг, 15.06.2023, 08:12 | Сообщение # 10 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: Offline
| Код function ILUSBBASE.OpenLDevice(VirtualSlot as short) as long return 0 End Function
А вот это не нужно, потому что реализация функций в коде не встречается. ILUSBBASE и его производные здесь выступают чисто как интерфейсы.
|
|
| |
haav | Дата: Четверг, 15.06.2023, 08:35 | Сообщение # 11 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: Offline
| Цитата zamabuvaraeu ( ) А вот это не нужно
убери и попробуй собрать без этой заглушки
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
zamabuvaraeu | Дата: Четверг, 15.06.2023, 19:56 | Сообщение # 12 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: Offline
| Цитата убери и попробуй собрать без этой заглушки На фрибесике нужно вместо Virtual делать Abstract. Абстрактные функции на фрибесике выражается ключевым словом Abstract, а в Си++ это выражается через присваивание функциям нуля. Код Type ILUSBBASE Extends Object Declare Abstract Function OpenLDevice(ByVal VirtualSlot As Short) As Long End Type
|
|
| |
haav | Дата: Четверг, 15.06.2023, 20:59 | Сообщение # 13 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: Offline
| ну да , Abstract наверное подойдет для данного случая.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
zamabuvaraeu | Дата: Четверг, 06.07.2023, 10:47 | Сообщение # 14 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: Offline
| Цитата какая блин разница, числл и число Большая разница. Арифметика с обычными числами использует стандартные регистры вроде rax, rbx, rcx. Числа с плавающей запятой работают в FPU‐регистрах.
|
|
| |