OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 27 Апрель, 2024 07:29

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Поддержка DLL в программах на КП
СообщениеДобавлено: Понедельник, 01 Март, 2010 09:08 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
http://forum.oberoncore.ru/viewtopic.php?f=1&p=43647:
AVC писал(а):
Пример из документации ББ ("Platform-Specific Issues (Windows)").
Код:
MODULE MyInterface ["MyDll"];
   PROCEDURE Proc1*;            (* Proc1 èç MyDll *)
   PROCEDURE Proc2* ["BlaBla"];            (* BlaBla èç MyDll *)
   PROCEDURE Proc3* ["OtherDll", ""];            (* Proc3 èç OtherDll *)
   PROCEDURE Proc4* ["OtherDll", "DoIt"];            (* DoIt èç OtherDll *)
END MyInterface.


Это одно из возможных решений задачи использования DLL в программах на КП, которое использовано в Блэкбокс.

На мой взгляд это решение несёт в себе очевидный недостаток: необходимость написания интерфейсных модулей для каждой библиотеки, которую мы хотим использовать.

А что если рассмотреть другое решение (пока теоретически).
Цель интерфейсных модулей: привести Си-шные типы в соответствии с КП-шными. Но "если гора не идёт к Магомеду ..." Что нам мешает ввести ещё один псевдомодуль, который будет "понимать" Си-шные типы. Разумеется использование этого модуля будет ограничено: только там, где требуются вызовы из DLL. По идеологии Блэкбокс такие вызовы - это весьма специфическое действо. По идее они должны встречаться только в подсистемах Host, Dev и в модуле Kernel.

И то, и другое решение требует соответствующей поддержки со стороны компилятора. Но во втором случае, не требуется писать километры интерфейсных модулей, которые к тому же не блещут алгоритмическими изысками :) .

Можно ещё рассмотреть и третье решение: создать утилиту, которая будет автоматически генерить интерфейсные модули по входному DLL-файлу.

Всё сказанное выше - не более, чем мысли вслух. Прошу не судить строго. Возможно, я что-то упускаю из виду.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поддержка DLL в программах на КП
СообщениеДобавлено: Понедельник, 01 Март, 2010 09:25 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
igor писал(а):
Можно ещё рассмотреть и третье решение: создать утилиту, которая будет автоматически генерить интерфейсные модули по входному DLL-файлу.

IMHO, это был бы хороший вариант, если бы "технология" DLL дотягивала до уровня оберонов (раздельная компиляция, символьные файлы, межмодульный контроль соответствия).
Но этого нет, поэтому имеет смысл рассмотреть генерацию интерфейсного модуля по файлам сишных заголовков (что поможет только частично).
Кажется, у XDS были какие-то наработки в этой области (если Александр Ильин это подтвердит).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поддержка DLL в программах на КП
СообщениеДобавлено: Понедельник, 01 Март, 2010 09:43 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
AVC писал(а):
Но этого нет, поэтому имеет смысл рассмотреть генерацию интерфейсного модуля по файлам сишных заголовков (что поможет только частично).
Угу. Учитывая практики вида
Код:
#define StdFunc1(a) Do(1, a, 0)
#define StdFunc2(a, b) Do(2, a, b)
void Do (int fn, int a, int b);
Требуется не только интерфейсный модуль к бинарной библ. и модуль-прослойка=интерфейс к стандарту библиотеки
Код:
бинарник <- интерфейс КП <- модуль-прослойка <- КП
Тут, по-моему, может быть только управляемая/контролируемая автогенерация...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поддержка DLL в программах на КП
СообщениеДобавлено: Понедельник, 01 Март, 2010 09:49 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
AVC писал(а):
Но этого нет, поэтому имеет смысл рассмотреть генерацию интерфейсного модуля по файлам сишных заголовков (что поможет только частично).
Кажется, у XDS были какие-то наработки в этой области (если Александр Ильин это подтвердит).

У XDS есть улитита H2D, которая конвертирует .h в .def:
Код:
DEFINITION MODULE ["StdCall"] ModuleName;
... далее на Modula-2
Это уже получится довольно близко к Оберону/КП. Насчёт обработки макросов точно сказать не могу, но не удивлюсь, если и это работает.

Если из DLL брать интерфейс, то там будут только имена функций, а с какими параметрами их вызывать - нет информации.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поддержка DLL в программах на КП
СообщениеДобавлено: Понедельник, 01 Март, 2010 10:22 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Александр Ильин писал(а):
Если из DLL брать интерфейс, то там будут только имена функций, а с какими параметрами их вызывать - нет информации.
Эта мысль на уровне подсознания сверлила мне голову :) . То есть в самой DLL списки параметров и результат функции не специфицированны? Досадно :( . Наша гипотетическая утилита должна будет предварительно выучить весь MS SDK. В общем, утопия.

Но, наши никогда не сдаются! :)
В мире Windows+Си все же пользуются библиотеками DLL. У меня тут вопрос к знатокам Си и DLL. Как в программах на Си решается эта проблема: списки параметров DLL-функций предварительно специфицируются в специальных заголовочных файлах, или передача правильных фактических параметров целиком лежит на совести программиста клиентской программы?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поддержка DLL в программах на КП
СообщениеДобавлено: Понедельник, 01 Март, 2010 10:34 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
igor писал(а):
Как в программах на Си решается эта проблема: списки параметров DLL-функций предварительно специфицируются в специальных заголовочных файлах, или передача правильных фактических параметров целиком лежит на совести программиста клиентской программы?

Да, специфицируются в специальных заголовочных файлах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поддержка DLL в программах на КП
СообщениеДобавлено: Понедельник, 01 Март, 2010 10:53 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
AVC писал(а):
Да, специфицируются в специальных заголовочных файлах.
Отлично. Значит у нас есть все необходимые спецификации для написания утилиты файл_DLL+заголовочный_файл TO интерфейсный_модуль_КП. Ведь все эти заголовочные файлы, я так понимаю, доступны через соответствующие development kit. Только представьте себе, несколько запусков такой утилиты, и вся DirectX (к примеру) портирована в Блэкбокс. Правда это не избавляет от необходимости написать соответствующее расширение каркаса. ("Остапа понесло", :D )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поддержка DLL в программах на КП
СообщениеДобавлено: Понедельник, 01 Март, 2010 10:55 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
И тут ВНЕЗАПНО выясняется, что dll пишутся не только на Си :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поддержка DLL в программах на КП
СообщениеДобавлено: Понедельник, 01 Март, 2010 11:08 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Alexey Veselovsky писал(а):
И тут ВНЕЗАПНО выясняется, что dll пишутся не только на Си :-)

Хе! Должен признаться, что подавляющее большинство интересующих меня DLL написаны именно на C/C++ :wink: .

PS: Если верить документации DevLinker, то DLL можно написать и на КП. Но вряд ли кто-нибудь станет переписывать на КП какую-нибудь opengl32.dll


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB