FreeBasic
Главная
Вход
Регистрация
Вторник, 15.10.2024, 10:24Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Конвертирование из C++
sashasoldДата: Суббота, 03.06.2023, 03:00 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 41
Репутация: 0
Статус: Offline
Кто знает синтаксис С?
Хотел перевести заголовки библиотеки, на читаемый язык (С не читаю)

Перевел type, enum
А вот это не могу разобрать
"template <class vers>"
 
zamabuvaraeuДата: Суббота, 03.06.2023, 06:47 | Сообщение # 2
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
"template <class vers>"
 
sashasoldДата: Суббота, 03.06.2023, 14:17 | Сообщение # 3
Лейтенант
Группа: Пользователи
Сообщений: 41
Репутация: 0
Статус: Offline
А ты в fb пробовал напечатать?)
 
zamabuvaraeuДата: Понедельник, 05.06.2023, 18:44 | Сообщение # 4
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
Форум съел сообщение.

1. Не путайте Си и Си++. Это разные языки программирования, и общего между ними только то, что в конце строки нужно точку с запятой ставить.

2. Во Фрибесике нет шаблонов. В Си тоже нет шаблонов.

3. Все ключевые слова class, struct и template на Фрибейсик транслируются как Type. Угловые скобки при этом удаляем.
 
sashasoldДата: Суббота, 10.06.2023, 22:43 | Сообщение # 5
Лейтенант
Группа: Пользователи
Сообщений: 41
Репутация: 0
Статус: 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
Репутация: 5
Статус: Offline
Покажите исходники что надо перевести.
 
sashasoldДата: Среда, 14.06.2023, 15:27 | Сообщение # 7
Лейтенант
Группа: Пользователи
Сообщений: 41
Репутация: 0
Статус: Offline
Вот исходники

https://disk.yandex.ru/d/6KHXxrTwPaophQ

(Файлы в сообщения не прикрепляет не ".h" не "zip" формат, только изображения)

Посмотрите кто сможет!


Сообщение отредактировал sashasold - Среда, 14.06.2023, 15:36
 
haavДата: Среда, 14.06.2023, 16:29 | Сообщение # 8
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: 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
Репутация: 0
Статус: Offline
Ну буду пробовать тогда сам допереводить, процентов 80 перевел то, но вот эти виртуальные методы, не пользовался ими раньше, да и шаюлонами. Хотя не прием подпрограмм например с double и передачи числа integer вызывал ошибку и жутко раздражал, какая блин разница, числл и число. Тут шаблоны наверно и придумали люди
 
zamabuvaraeuДата: Четверг, 15.06.2023, 08:12 | Сообщение # 10
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline

Код
function ILUSBBASE.OpenLDevice(VirtualSlot as short) as long
    return 0
End Function
А вот это не нужно, потому что реализация функций в коде не встречается. ILUSBBASE и его производные здесь выступают чисто как интерфейсы.
 
haavДата: Четверг, 15.06.2023, 08:35 | Сообщение # 11
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: Offline
Цитата zamabuvaraeu ()
А вот это не нужно


убери и попробуй собрать без этой заглушки


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
zamabuvaraeuДата: Четверг, 15.06.2023, 19:56 | Сообщение # 12
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: 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
Репутация: 49
Статус: Offline
ну да , Abstract наверное подойдет для данного случая.

Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
zamabuvaraeuДата: Четверг, 06.07.2023, 10:47 | Сообщение # 14
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline

Цитата
какая блин разница, числл и число
Большая разница.
Арифметика с обычными числами использует стандартные регистры вроде rax, rbx, rcx.
Числа с плавающей запятой работают в FPU‐регистрах.
 
  • Страница 1 из 1
  • 1
Поиск: