Компонентная модель организации программных систем. Семакин М.М. - 21 стр.

UptoLike

Составители: 

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