⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 luaassociativearray.pas

📁 从Delphi中调用lua
💻 PAS
字号:
unit luaAssociativeArray;

{$mode objfpc}{$H+}

interface

uses
  Lua, Classes, SysUtils, uAssociativeArray;

procedure RegisterAssociativeArray(L : Plua_State);
procedure RegisterExistingAssociativeArray(L : Plua_State; ar : TAssociativeArray; instanceName : AnsiString);

implementation

uses
  pLua, pLuaObject;

var
  AssociativeArrayInfo : TLuaClassInfo;

function newAssociativeArray(l : PLua_State; paramidxstart, paramcount : Integer; InstanceInfo : PLuaInstanceInfo) : TObject;
begin
  result := TAssociativeArray.Create;
end;

function _indexAssociativeArray(target : TObject; l : Plua_State; paramidxstart, paramcount : integer) : Integer;
var
  vName : AnsiString;
begin
  vName := plua_tostring(l, paramidxstart-1);
  plua_pushvariant(l, TAssociativeArray(target).Values[vName]);
  result := 1;
end;

function _newindexAssociativeArray(target : TObject; l : Plua_State; paramidxstart, paramcount : integer) : Integer;
var
  vName : AnsiString;
  vValue: Variant;
begin
  vName := plua_tostring(l, paramidxstart-1);
  vValue := plua_tovariant(l, paramidxstart);
  TAssociativeArray(target).Values[vName] := vValue;
  result := 0;
end;

procedure RegisterAssociativeArray(L: Plua_State);
begin
  plua_registerclass(L, AssociativeArrayInfo);
end;

procedure RegisterExistingAssociativeArray(L: Plua_State;
  ar: TAssociativeArray; instanceName: AnsiString);
begin
  plua_registerExisting(l, instanceName, ar, @AssociativeArrayInfo, false);
end;

function setAssociativeArrayInfo : TLuaClassInfo;
begin
  plua_initClassInfo(result);
  result.ClassName := 'TAssociativeArray';
  result.New := @newAssociativeArray;
  result.UnhandledReader := @_indexAssociativeArray;
  result.UnhandledWriter := @_newindexAssociativeArray;
end;

initialization
  AssociativeArrayInfo := setAssociativeArrayInfo;
  
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -