OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Рефлексивный вызов процедуры
СообщениеДобавлено: Вторник, 03 Июль, 2012 13:42 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Понадобилось тут выполнить процедуру, имя которой описано во внешнем ресурсе. С помощью меты написал рефлексивный вызов за несколько минут, аналогично тому, как сделано в SqlControls.CallGuard:

Код:
   TYPE
      GuardProcVal = RECORD (Meta.Value) p*: Dialog.GuardProc END;

   PROCEDURE CallGuard (c: Control; VAR disabled: BOOLEAN; VAR string: ARRAY OF CHAR);
      VAR ok: BOOLEAN; dpar: Dialog.Par; v: GuardProcVal; i: Meta.Item;
   BEGIN
      dpar.disabled := FALSE; dpar.undef := FALSE; dpar.readOnly := FALSE;
      dpar.checked := FALSE; dpar.label := "";
      Meta.LookupPath(c.prop.guard, i);
      IF (i.obj = Meta.procObj) OR (i.obj = Meta.varObj) & (i.typ = Meta.procTyp) THEN
         i.GetVal(v, ok);
         IF ok THEN v.p(dpar) END
      END;
      disabled := dpar.disabled; string := dpar.label$
   END CallGuard;


Для рефлексивного вызова, надо по имени процедуры получить мета-объект, затем вытащить из него значение особого типа GuardProcVal, и произвести собственно вызов.

Подумалось, что это не только характерный пример, демонстрирующий работу внутренних механизмов ББ и могущий оказаться полезным желающим разобраться во внутренностях Ящика, но и неплохая точка сравнения ББ с другими системами.

На мой взгляд, в данном способе ничего "военного" в плане критики нет. Рантайм-сущность и обобщённое значение, конкретизированное прикладным типом. Рабочая штучка. Может, стоит его загнать в вики?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Рефлексивный вызов процедуры
СообщениеДобавлено: Вторник, 03 Июль, 2012 20:06 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Это мне отдаленно напоминает последнюю конференцию в Байтике, где кто-то с энтузиазмом рассказывал про инновацию "софт как услуга", когда нужный софт подкачивается из Сети по мере надобности.

Что было у ББ по кр. мере в локальной сети с незапамятных времен (серверная установка, в Байтике все учебные места работают так).

Надо говорить об этих вещах :)
Ну, и подпиливать ББ по мере.


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

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


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

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


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

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