kekcleader / FreeOberon

Cross-platform IDE for development in Oberon programming language made in the classical FreePascal-like pseudo-graphic style.
GNU General Public License v3.0
135 stars 14 forks source link

Предложение .... #1

Closed MGWL closed 3 years ago

MGWL commented 6 years ago

Предлагаю проверить возможность работы FreeOberon с моей библиотекой QtE5. Для этого, мне надо иметь возможность вызова из Оберон нескольких функций, типа LoadLibrary и т.д.

Если интересно, то можно совместно проверить данное направление ...

kekcleader commented 6 years ago

Идея мне нравится. С удовольствием поспособствую. Расскажите немного о QtE5 и о необходимых функциях. Например, что именно должна делать LoadLibrary?

MGWL commented 6 years ago

QtE5 - это идея, как задействовать C++ Qt объекты из другого языка. Примеры: https://github.com/MGWL/QtE5 (там же есть ссылки на видео моих наработок). Я уже испытал этот подход на Forth и D. На Pascal однозначно можно, а вот на Оберон - это вопрос. Нужно: 1 - Функция вызова внешний библиотеки (dll / so), обычно LoadLibrary() 2 - Функции поиска экспортной функции в DLL 3 - Возможность вызова внешних функций типа cdecl 4 - Возможность предоставить собственную функцию типа cdecl для callback (обратного) вызова

kekcleader commented 6 years ago

В Обероне такое подключение внешних модулей (DLL/SO) обычно делается следующим образом.

  1. Создаётся отдельный исходный файл модуля (на FreeOberon / VOC / Ofront / OfrontPlus) это файл с расширением .Mod. (Пример: SDL2.Mod)
  2. В этом файле описывается внешний модуль в понятиях языка Оберон. Указывается также и название DLL/SO библиотеки.
  3. Возможно потребуется создать файл с расширением .h0, чтобы дополнительно описать некоторые объекты (имеются в виду типы, процедуры и т. п.) на Си.
  4. Возможно создаётся ещё один модуль на Обероне, который представляет собой уже чисто Обероновскую оболочку тех процедур, которые описаны в модуле, созданном в пункте 1. (Пример: Graph.Mod)

В Blackbox Component Builder и Optimizing Oberon to C Compiler это делается несколько иначе, например, такой модуль имеет несколько иной синтаксис, но всё равно процедура схожая.

Не исключён также и предложенный Вами способ (типа LoadLibrary), но это менее распространено. Такую процедуру сейчас нет.

Пример того, как это делается на Free Oberon вы можете найти в файлах src/SDL2.Mod src/SDL2.h0 и Graph.Mod. https://github.com/kekcleader/FreeOberon/tree/master/src

MGWL commented 6 years ago

в ближайшее время испытаю ))