OberonCore https://forum.oberoncore.ru/ |
|
Рефлексивный вызов процедуры https://forum.oberoncore.ru/viewtopic.php?f=23&t=4013 |
Страница 1 из 1 |
Автор: | Иван Кузьмицкий [ Вторник, 03 Июль, 2012 13:42 ] |
Заголовок сообщения: | Рефлексивный вызов процедуры |
Понадобилось тут выполнить процедуру, имя которой описано во внешнем ресурсе. С помощью меты написал рефлексивный вызов за несколько минут, аналогично тому, как сделано в 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, и произвести собственно вызов. Подумалось, что это не только характерный пример, демонстрирующий работу внутренних механизмов ББ и могущий оказаться полезным желающим разобраться во внутренностях Ящика, но и неплохая точка сравнения ББ с другими системами. На мой взгляд, в данном способе ничего "военного" в плане критики нет. Рантайм-сущность и обобщённое значение, конкретизированное прикладным типом. Рабочая штучка. Может, стоит его загнать в вики? |
Автор: | Info21 [ Вторник, 03 Июль, 2012 20:06 ] |
Заголовок сообщения: | Re: Рефлексивный вызов процедуры |
Это мне отдаленно напоминает последнюю конференцию в Байтике, где кто-то с энтузиазмом рассказывал про инновацию "софт как услуга", когда нужный софт подкачивается из Сети по мере надобности. Что было у ББ по кр. мере в локальной сети с незапамятных времен (серверная установка, в Байтике все учебные места работают так). Надо говорить об этих вещах Ну, и подпиливать ББ по мере. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |