библиотека irrKlang-1.4.0-
|
|
electrik | Дата: Среда, 02.04.2014, 10:33 | Сообщение # 1 |
Полковник
Группа: Друзья
Сообщений: 182
Статус: Offline
| во FreeBasic 0.90, появились абстрактные и виртуальные методы. я решил адаптировать полностью классы irrKlang на FreeBasic. всё получилось, но не работает. вродь абстрактные методы, должны быть везде одинаковые. посути, абстрактные методы - это таблица указателей на них(vtable, но оно не работает. при адаптации столкнулся с несовместимостью пространств имён, Fb генерит чуток другую инструкцию. обошёл просто, через GetProcAddress, достучался до нужной функции, в dll, а она возвращает указатель на таблицу указателей на абстрактные методы. функция из dll, отрабатывается, а вот дальше... как только пытаюсь вызвать метод, прога падает. мне, ввиду сложности заюзать дебаггер, мож кто разберётся, вот ссылка на боекомплект: ftp://el-zone.spb.ru/freebas....bove.7z
|
|
| |
haav | Дата: Среда, 02.04.2014, 13:33 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1374
Статус: Offline
| Сергей! Хорошее дело, но я советую чуть повременить с этим до выхода компиля 0.91. Разработчики слишком много там исправили и переделали для OOП. Может так статься , что твои адаптированные классы не будут работать на новой версии. А после выхода, кто знает может и не придется мучаться с пространством имен, как это проделал ты. Но на исходник, который ты выложил я посмотрю, как только голова будет свежая и никто мешать из домашних не будет. Хотя не факт, что я разберусь в этом, реально я еще очень далек от понимания всех этих ООП примочек.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Среда, 02.04.2014, 14:55 | Сообщение # 3 |
Генералиссимус
Группа: Администраторы
Сообщений: 1374
Статус: Offline
| Я так по быстрому посмотрел. Но ничего не понял. В отладчике можно выявить проблему только если понимаешь как должна функционировать сама библиотека, а так ну дошло все дело до вызова функции play2D , подсунулся там какой то адрес, что это за адрес? Куда по делу должен быть переход? Еще как-то можно понять, если есть аналогичный работающий код хотя бы на СИ. Там можно хоть глянуть внутренности самой функции и на основе этого уже разбирать почему у FB кода происходит крах. Валится в модуле irrKlang.dll. Вообще по хорошему, если идет адаптация кода с любого языка, нужно хотя на время адаптации сохранять и закомментированные аналоги прототипов этого языка рядом, по типу:
Код 'int f(); declare function f() as integer
А так найти ошибку очень сложно.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
electrik | Дата: Суббота, 05.04.2014, 00:28 | Сообщение # 4 |
Полковник
Группа: Друзья
Сообщений: 182
Статус: Offline
| да я тоже далёк от ооп, просто читаю строку, и понимаю как её перевести на fbc. если встречается незнакомый момент, функция или синтаксический изворот, шаблоны, читаю доку и пытаюсь разбирать. в данном случае, шаблоны были только для 3d, там написаны функции один раз, а компилятор потом по шаблону, подставляет нужные типы, int или float и делает столько копий функций(перегрузок) сколько надо. шаблоны c++ избавляют от написания огромной кучи overload функций. думаю, в fb тоже потом придумают, только вот синтаксис в c++ чуток у шаблонов долбанутый, но это дело привычки. думаю, fb ожидает учесть, если задумают, с c++ стянут. уже есть намёки, можно ведь интегер сделать как байт - пишется это вроде: dim A as integer<8>
новую версию fb тоже жду. вродь x64 версия будет.
|
|
| |
|