Использование интерфейса IgetFunctionText с полной реализацией |
Данный пример демонстрирует полную реализацию функциональности интерфейса IGetFunctionText.
#include getFunctionText.vih //========================================================= vipInterface IScriptHolder implements IGetFunctionText; static: function Execute(func_Name : string); end; //========================================================= interface IScriptHolder; //--------------------------------------------------------- function Compile(func_Name : string) : longInt; begin Message('Trying to compile '+Func_Name+'...'); if func_Name='Какой_то__скрипт' then begin Message('Script source found. compiling...'); var sourceHandle : LongInt; sourceHandle := vaGetFreeHandle; vaAddStr(sourceHandle, 'script Какой_то__скрипт : word;'); vaAddStr(sourceHandle, 'begin'); vaAddStr(sourceHandle, ' result := 65535;'); vaAddStr(sourceHandle, ' Message(''it works =)'');'); vaAddStr(sourceHandle, 'end.'); result := vacompile(sourceHandle); vaFreeSource(sourceHandle); end; end; //--------------------------------------------------------- function Execute(func_Name : String); begin if func_Name = 'Какой_то__скрипт' then begin var result : word; vaExecute(vaGet('Какой_то__скрипт'), result); Message('script returned ' + result); end else Message('Неизвестная функция. Обратитесь к разработчикам =)'); end; end. //========================================================= interface test; create view as select * from x$files ; //--------------------------------------------------------- screen sc << >> end; //--------------------------------------------------------- handleEvent cmInit: { var scriptHolder : IScriptHolder new; // устанавливаем автоматический обработчик vaSetIFunctionText(scriptHolder); // срабатывает автоматический обработчик vaGet('Какой_то__скрипт'); scriptHolder.Execute('Какой_то__скрипт'); }; end; end.