Составители:
Рубрика:
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
