Оберон-клуб «ВЄДАsoft» https://zx.oberon.org/forum/ |
|
Биндинги к внешним библиотекам https://zx.oberon.org/forum/viewtopic.php?f=32&t=189 |
Страница 1 из 1 |
Автор: | Zorko [ 05 апр 2014, 19:52 ] |
Заголовок сообщения: | Биндинги к внешним библиотекам |
Я считаю текущие возможности по пристыковке к внешним библиотекам, предлагаемые транслятором Ofront, совершенно недостаточными и даже слегка странноватыми. Смотрите как Йозеф предлагает задействовать возможности внешних библиотек (привожу на примере Windows, но с Linux те же пироги): Код: "OBERON"
Код: "C" /* Ofront 1.2 -xtspkae */ Код: "C" /* Ofront 1.2 -xtspkae */ Код: "OBERON"
Код: "C" /* Ofront 1.2 -xtspkae */
|
Автор: | Zorko [ 05 апр 2014, 20:12 ] |
Заголовок сообщения: | Re: Биндинги к внешним библиотекам |
Серьёзным сдерживающим фактором, который мешает задействовать Ofront для активной разработки под Windows, есть элементарное отсутствие удобных средств для подстыковки к WinApi. Я сделал (для XDev) импорт некоторых функций указанным выше способом, но пришло время признать, что нужно решать эту проблему более кардинально. В состав BlackBox и POW! входят модули-прослойки к WinApi, но чтобы задействовать их в Ofront'е — придётся пересмотреть принятый в нём способ описания процедур в биндингах (принятый сейчас способ можно оставить, т.к. у него есть свои достоинства). Я рассмотрел как это реализовано в BlackBox, POW!, ETH Oberon, Delphi. Обычно для описания внешней процедуры кроме Оберон-имени и списка параметров (и типа результата) нужно указать три параметра:
имя библиотеки, в которой находится процедура; имя процедуры (на тот случай если оно отличается от обероновского). Самым важным конечно является имя библиотеки, остальные параметры в идеале можно опускать, тогда будет принято значение по умолчанию (модель вызова по умолчанию, т.е. __stdcall, и такое же имя, как и описано). Я пока что в раздумьях насчёт синтаксиса, надо посоветоваться по этому вопросу с Норайром. |
Автор: | Дмитрий Дагаев [ 07 апр 2014, 11:50 ] |
Заголовок сообщения: | Re: Биндинги к внешним библиотекам |
Олег! Во-первых, спасибо за наводки по Ofront'у: для меня это оказалось удобно и полезно. Цитата: code procedures should only be exported if the names involved are very unlikely to produce a name clash or if efficiency is of highest priority Либо прослойка, либо эффективность. Я использую для Linux описания функций в .c0 .h0 вместо include. В примере выше я бы вставил код типа Код: "C"
В my_windows.h я бы вставил BOOL, WINAPI, DWORD, а не тащил бы всю область видимости windows.h |
Автор: | Zorko [ 07 апр 2014, 17:19 ] |
Заголовок сообщения: | Re: Биндинги к внешним библиотекам |
Норайр за минимализм и масимальную портабельность. С учётом архитектуры Ofront'а мы выработали следующее решение в духе Оберона: системные процедуры, помеченные "PROCEDURE - ", для которых не задано тело: Код: "OBERON"
Код: "C" #define WinApi_CreateWindowEx(dwExStyle, lpClassName, lpWindowName, dwStyle, X, Y, nWidth, \ Атрибуты __EXTERN и __CALL для удобства вынесены в SYSTEM.h и для платформы Windows их определение выглядит так: Код: "C" #define __EXTERN __declspec(dllimport) |
Автор: | Zorko [ 08 апр 2014, 11:01 ] | ||
Заголовок сообщения: | Re: Биндинги к внешним библиотекам | ||
Здравствуйте, Дмитрий! Добро пожаловать на форум. Почему-то Ofront не очень известен даже среди оберонщиков, но я нахожу его великолепным, в т.ч. и как основу для своих усовершенствований. И я давно хотел приспособить Ofront для разработки на Обероне-2 вместо Си под Windows 32/64 бит, но ничего не имею и против Linux. Поэтому выработанное нами решение призвано быть опорой на платформу (целевая платформа Ofront'а — это язык Си) для использования на этих (и других, вплоть до ARM) архитектурах. Так что пользуйтесь, критикуйте, предлагайте. Сейчас активно работаю над адаптацией к Ofront'у (указанным выше способом) биндинга WinApi из BlackBox. Удалось успешно собрать пример MoveWindow из статьи "Как создать программу *.exe". На очереди — адаптация биндинга к 64 битам. Закончу — отпишусь.
|
Автор: | Zorko [ 02 дек 2014, 19:57 ] |
Заголовок сообщения: | Re: Биндинги к внешним библиотекам |
В принципе, биндинги к WinAPI и SDL уже можно использовать и для 32, и для 64 бит. Мне сложно протестировать корректную работу всех функций, использованных типов и записей, поэтому, как водится, используем на свой страх и риск. Наличия проблем не исключаю. Но работает. |
Страница 1 из 1 | Часовой пояс: UTC + 2 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |