Составители:
Рубрика:
21
Пример:
dofile( "SysUtils.lua" )
wmlib = openlib( "WMtoLUA.dll" )
wm = new( wmlib.IWorkMemory ) // Создать компонент IWorkMemory
// из библиотеки wmlib
if not wm then
error( "wm is nil" )
end
Реализация функции new (см. файл COMA\sdk\LuaScript\SysUtils.lua):
function new( class_func, ... )
local new_arg = concat_tbl(arg)
local type_tbl = class_func()
tinsert( new_arg, 1, type_tbl )
return call( type_tbl.new, new_arg )
end
8.4. Представление класса Delphi в виде COMA-компонента
1. К проекту необходимо подключить модули Lua.pas и LuaObject_unit.pas (они
расположены в COMA\sdk\Delphi\LUA\).
2. Создать или подключить модуль TMyComponent_Class.pas с объявлением и
реализацией компонента в виде класса Delphi.
3. Создать модуль TMyComponent_BaseLuaObject.pas, который будет использо-
ваться для «тонкой» настройки компонента. Можно использовать следующий
шаблон модуля:
unit TMyComponent_BaseLuaObject;
interface
uses
Lua,
LuaObject_unit,
TMyComponent_Class;
////////////////////////////////////////////////////////////////////////////////
function TMyComponent_alloc( L: lua_State ): integer; cdecl;
function TMyComponent_new( L: lua_State ): integer; cdecl;
{------------------------------------------------------------------------------}
const
TBaseMyComponentMethodsCount = 2;
TBaseMyComponent_Methods: array [1..TBaseMyComponentMethodsCount] of TMethodRec = (
(Name: 'alloc'; MethodHandler: TMyComponent_alloc),
(Name: 'new'; MethodHandler: TMyComponent_new)
);
TBaseMyComponent_Info: TObjectInfo = (
ClassName: 'TBaseMyComponent';
ParentObject: @TObject_Info;
MethodsCount: TBaseMyComponentMethodsCount;
Methods: @TBaseMyComponent_Methods;
);
Пример: dofile( "SysUtils.lua" ) wmlib = openlib( "WMtoLUA.dll" ) wm = new( wmlib.IWorkMemory ) // Создать компонент IWorkMemory // из библиотеки wmlib if not wm then error( "wm is nil" ) end Реализация функции new (см. файл COMA\sdk\LuaScript\SysUtils.lua): function new( class_func, ... ) local new_arg = concat_tbl(arg) local type_tbl = class_func() tinsert( new_arg, 1, type_tbl ) return call( type_tbl.new, new_arg ) end 8.4. Представление класса Delphi в виде COMA-компонента 1. К проекту необходимо подключить модули Lua.pas и LuaObject_unit.pas (они расположены в COMA\sdk\Delphi\LUA\). 2. Создать или подключить модуль TMyComponent_Class.pas с объявлением и реализацией компонента в виде класса Delphi. 3. Создать модуль TMyComponent_BaseLuaObject.pas, который будет использо- ваться для «тонкой» настройки компонента. Можно использовать следующий шаблон модуля: unit TMyComponent_BaseLuaObject; interface uses Lua, LuaObject_unit, TMyComponent_Class; //////////////////////////////////////////////////////////////////////////////// function TMyComponent_alloc( L: lua_State ): integer; cdecl; function TMyComponent_new( L: lua_State ): integer; cdecl; {------------------------------------------------------------------------------} const TBaseMyComponentMethodsCount = 2; TBaseMyComponent_Methods: array [1..TBaseMyComponentMethodsCount] of TMethodRec = ( (Name: 'alloc'; MethodHandler: TMyComponent_alloc), (Name: 'new'; MethodHandler: TMyComponent_new) ); TBaseMyComponent_Info: TObjectInfo = ( ClassName: 'TBaseMyComponent'; ParentObject: @TObject_Info; MethodsCount: TBaseMyComponentMethodsCount; Methods: @TBaseMyComponent_Methods; ); 21