替同事做了个洛奇英雄传自动染色程序,关于屏幕取色的.
因为里面他对颜色的要求比较复杂,改动也比较大,于是我让他把逻辑写在 lua 脚本里面.
- uses LUA, LUALIB;
- function lua_CheckColor(r,g,b:Integer):Boolean;
- var
- Lua : TLua;
- begin
- Lua := TLua.Create;
- luaopen_debug(LuaInstance);
- luaopen_math(LuaInstance);
- luaopen_os(LuaInstance);
- luaopen_string(LuaInstance);
- luaopen_table(LuaInstance);
- Lua.DoFile(‘lua_GetColor.lua‘);
- lua_getglobal(Lua.LuaInstance,‘nogi_GetColor‘);
- lua_pushnumber(Lua.LuaInstance, r);
- lua_pushnumber(Lua.LuaInstance, g);
- lua_pushnumber(Lua.LuaInstance, b);
-
-
- lua_pcall(Lua.LuaInstance, 3, 1,0) ;
-
-
- Result := (lua_toInteger(Lua.LuaInstance,-1) = 1);
- Lua.Free;
- end;
LUA 里面的内容是这样的
- function nogi_GetColor(nR,nG,nB)
- if nR <= 25 and nG <= 25 and nB <= 25 then -- 取出25以下黑色
- return 1;
- end;
-
- return 0;
- end
附上我这里带的 LUA.PAS 和 LUALIB.PAS
lua.pas
-
- unit Lua;
-
- interface
-
- uses
- Classes,
- LuaLib;
-
- type
- TLuaState = Lua_State;
-
- TLua = class(TObject)
- private
- fAutoRegister: Boolean;
- CallbackList: TList;
- public
- LuaInstance: TLuaState;
- constructor Create(AutoRegister: Boolean = True); overload; virtual;
- destructor Destroy; override;
- function DoFile(Filename: String): Integer; virtual;
- procedure RegisterFunction(FuncName: AnsiString; MethodName: AnsiString = ‘‘; Obj: TObject = NIL); virtual;
- procedure AutoRegisterFunctions(Obj: TObject);
- procedure UnregisterFunctions(Obj: TObject);
- end;
-
- implementation
-
- type
- TProc = function(L: TLuaState): Integer of object;
-
- TCallback = class
- Routine: TMethod;
- Exec: TProc;
- end;
-
- function LuaCallBack(L: Lua_State): Integer; cdecl;
- var
- CallBack: TCallBack;
- begin
-
- CallBack := lua_topointer(L, lua_upvalueindex(1));
-
-
- if (assigned(CallBack) and assigned(CallBack.Exec)) then
- Result := CallBack.Exec(L)
- else
- Result := 0;
- end;
-
-
- constructor TLua.Create(AutoRegister: Boolean = True);
- begin
- inherited Create;
-
- if (not LuaLibLoaded) then
- LoadLuaLib;
-
-
- LuaInstance := Lua_Open();
- luaopen_base(LuaInstance);
-
- fAutoRegister := AutoRegister;
-
-
- CallBackList := TList.Create;
-
-
- if (AutoRegister) then
- AutoRegisterFunctions(self);
- end;
-
- destructor TLua.Destroy;
- begin
-
- if (fAutoRegister) then
- UnregisterFunctions(Self);
-
-
- CallBackList.Free;
-
-
- Lua_Close(LuaInstance);
- inherited;
- end;
-
- function TLua.DoFile(Filename: String): Integer;
- begin
- Result := lual_dofile(LuaInstance, PAnsiChar(AnsiString(Filename)));
- end;
-
- procedure TLua.RegisterFunction(FuncName: AnsiString; MethodName: AnsiString = ‘‘; Obj: TObject = NIL);
- var
- CallBack: TCallBack;
- begin
-
- if (MethodName = ‘‘) then
- MethodName := FuncName;
-
-
- if (Obj = NIL) then
- Obj := Self;
-
-
- CallBack := TCallBack.Create;
- CallBack.Routine.Data := Obj;
- CallBack.Routine.Code := Obj.MethodAddress(String(MethodName));
- CallBack.Exec := TProc(CallBack.Routine);
- CallbackList.Add(CallBack);
-
-
- lua_pushstring(LuaInstance, PAnsiChar(FuncName));
-
-
- lua_pushlightuserdata(LuaInstance, CallBack);
-
-
- lua_pushcclosure(LuaInstance, LuaCallBack, 1);
- lua_settable(LuaInstance, LUA_GLOBALSINDEX);
- end;
-
- procedure TLua.UnregisterFunctions(Obj: TObject);
- var
- I: Integer;
- CallBack: TCallBack;
- begin
-
- for I := CallBackList.Count downto 1 do
- begin
- CallBack := CallBackList[I-1];
- if (assigned(CallBack)) and (CallBack.Routine.Data = Obj) then
- begin
- CallBack.Free;
- CallBackList.Items[I-1] := NIL;
- CallBackList.Delete(I-1);
- end;
- end;
- end;
-
- procedure TLua.AutoRegisterFunctions(Obj: TObject);
- type
- PPointer = ^Pointer;
- PMethodRec = ^TMethodRec;
-
- TMethodRec = packed record
- wSize: Word;
- pCode: Pointer;
- sName: ShortString;
- end;
- var
- MethodTable: PAnsiChar;
- MethodRec: PMethodRec;
- wCount: Word;
- nMethod: Integer;
- begin
-
- MethodTable := PAnsiChar(Pointer(PAnsiChar(Obj.ClassType) + vmtMethodTable)^);
-
- if (MethodTable <> Nil) then
- begin
-
- Move(MethodTable^, wCount, 2);
-
-
-
- MethodRec := PMethodRec(MethodTable + 2);
-
-
- for nMethod := 0 to wCount - 1 do
- begin
-
- RegisterFunction(MethodRec.sName, MethodRec.sName, Obj);
-
- MethodRec := PMethodRec(PAnsiChar(MethodRec) + MethodRec.wSize);
- end;
- end;
- end;
-
-
- end.
lualib.pas
- unit LuaLib;
-
- interface
-
- const
- LUA_VERSION = ‘Lua 5.1‘;
- LUA_RELEASE = ‘Lua 5.1.2‘;
- LUA_COPYRIGHT = ‘Copyright (C) 1994-2004 Tecgraf, PUC-Rio‘;
- LUA_AUTHORS = ‘R. Ierusalimschy, L. H. de Figueiredo & W. Celes‘;
-
- LUA_PASCAL_51_AUTHOR = ‘Marco Antonio Abreu‘;
- LUA_PASCAL_51_COPYRIGHT = ‘Copyright (C) 2007 Marco Antonio Abreu‘;
-
-
- LUA_SIGNATURE = #27‘Lua‘;
-
-
- LUA_MULTRET = -1;
-
-
- LUA_REGISTRYINDEX = -10000;
- LUA_ENVIRONINDEX = -10001;
- LUA_GLOBALSINDEX = -10002;
-
-
- LUA_TRD_YIELD = 1;
- LUA_ERRRUN = 2;
- LUA_ERRSYNTAX = 3;
- LUA_ERRMEM = 4;
- LUA_ERRERR = 5;
-
-
- LUA_ERRFILE = LUA_ERRERR + 1;
-
-
- LUA_TNONE = -1;
- LUA_TNIL = 0;
- LUA_TBOOLEAN = 1;
- LUA_TLIGHTUSERDATA = 2;
- LUA_TNUMBER = 3;
- LUA_TSTRING = 4;
- LUA_TTABLE = 5;
- LUA_TFUNCTION = 6;
- LUA_TUSERDATA = 7;
- LUA_TTHREAD = 8;
-
-
- LUA_MINSTACK = 20;
-
-
- LUA_GCSTOP = 0;
- LUA_GCRESTART = 1;
- LUA_GCCOLLECT = 2;
- LUA_GCCOUNT = 3;
- LUA_GCCOUNTB = 4;
- LUA_GCSTEP = 5;
- LUA_GCSETPAUSE = 6;
- LUA_GCSETSTEPMUL = 7;
-
-
-
-
- LUA_HOOKCALL = 0;
- LUA_HOOKRET = 1;
- LUA_HOOKLINE = 2;
- LUA_HOOKCOUNT = 3;
- LUA_HOOKTAILRET = 4;
-
-
- LUA_MASKCALL = (1 shl LUA_HOOKCALL);
- LUA_MASKRET = (1 shl LUA_HOOKRET);
- LUA_MASKLINE = (1 shl LUA_HOOKLINE);
- LUA_MASKCOUNT = (1 shl LUA_HOOKCOUNT);
-
-
-
-
- LUA_NUMBER_SCAN = ‘%lf‘;
- LUA_NUMBER_FMT = ‘%.14g‘;
- LUAI_MAXNUMBER2STR = 32;
-
-
- LUA_NOREF = -2;
- LUA_REFNIL = -1;
-
- LUA_IDSIZE = 60;
-
-
- LUA_COLIBNAME = ‘coroutine‘;
- LUA_TABLIBNAME = ‘table‘;
- LUA_IOLIBNAME = ‘io‘;
- LUA_OSLIBNAME = ‘os‘;
- LUA_STRLIBNAME = ‘string‘;
- LUA_MATHLIBNAME = ‘math‘;
- LUA_DBLIBNAME = ‘debug‘;
- LUA_LOADLIBNAME = ‘package‘;
-
-
-
- BUFSIZ = 512;
- LUAL_BUFFERSIZE = BUFSIZ;
-
- type
- lua_State = type Pointer;
-
- lua_CFunction = function(L: lua_State): Integer; cdecl;
-
-
- lua_Reader = function(L: lua_State; data: Pointer; var size: Cardinal): PAnsiChar; cdecl;
- lua_Writer = function(L: lua_State; p: Pointer; sz: Cardinal; ud: Pointer): Integer; cdecl;
-
-
- lua_Alloc = function(ud, ptr: Pointer; osize, nsize: Cardinal): Pointer; cdecl;
-
-
- lua_Number = type double;
-
- lua_Integer = type integer;
-
- lua_Debug = packed record
- event: Integer;
- name: PAnsiChar;
- namewhat: PAnsiChar;
- what: PAnsiChar;
- source: PAnsiChar;
- currentline: Integer;
- nups: Integer;
- linedefined: Integer;
- lastlinedefine: Integer;
- short_src: array[0..LUA_IDSIZE - 1] of AnsiChar;
-
- i_ci: Integer;
- end;
-
-
- lua_Hook = procedure(L: lua_State; var ar: lua_Debug); cdecl;
-
-
- PluaL_reg = ^luaL_reg;
- luaL_reg = packed record
- name: PAnsiChar;
- func: lua_CFunction;
- end;
-
-
-
- luaL_Buffer = packed record
- p: PAnsiChar;
- lvl: Integer;
- L: lua_State;
- buffer: array[0..LUAL_BUFFERSIZE - 1] of AnsiChar;
- end;
-
- var
-
- lua_newstate: function(f: lua_Alloc; ud: Pointer): lua_State; cdecl;
- lua_close: procedure(L: lua_State); cdecl;
- lua_newthread: function(L: lua_State): lua_State; cdecl;
- lua_atpanic: function(L: lua_State; panicf: lua_CFunction): lua_CFunction; cdecl;
-
-
- lua_gettop: function(L: lua_State): Integer; cdecl;
- lua_settop: procedure(L: lua_State; idx: Integer); cdecl;
- lua_pushvalue: procedure(L: lua_State; idx: Integer); cdecl;
- lua_remove: procedure(L: lua_State; idx: Integer); cdecl;
- lua_insert: procedure(L: lua_State; idx: Integer); cdecl;
- lua_replace: procedure(L: lua_State; idx: Integer); cdecl;
- lua_checkstack: function(L: lua_State; extra: Integer): LongBool; cdecl;
- lua_xmove: procedure(from, dest: lua_State; n: Integer); cdecl;
-
-
-
- lua_isnumber: function(L: lua_State; idx: Integer): LongBool; cdecl;
- lua_isstring: function(L: lua_State; idx: Integer): LongBool; cdecl;
- lua_iscfunction: function(L: lua_State; idx: Integer): LongBool; cdecl;
- lua_isuserdata: function(L: lua_State; idx: Integer): LongBool; cdecl;
- lua_type: function(L: lua_State; idx: Integer): Integer; cdecl;
- lua_typename: function(L: lua_State; tp: Integer): PAnsiChar; cdecl;
-
- lua_equal: function(L: lua_State; idx1, idx2: Integer): LongBool; cdecl;
- lua_rawequal: function(L: lua_State; idx1, idx2: Integer): LongBool; cdecl;
- lua_lessthan: function(L: lua_State; idx1, idx2: Integer): LongBool; cdecl;
-
- lua_tonumber: function(L: lua_State; idx: Integer): lua_Number; cdecl;
- lua_tointeger: function(L: lua_State; idx: Integer): lua_Integer; cdecl;
- lua_toboolean: function(L: lua_State; idx: Integer): LongBool; cdecl;
- lua_tolstring: function(L: lua_State; idx: Integer; var len: Cardinal): PAnsiChar; cdecl;
- lua_objlen: function(L: lua_State; idx: Integer): Cardinal; cdecl;
- lua_tocfunction: function(L: lua_State; idx: Integer): lua_CFunction; cdecl;
- lua_touserdata: function(L: lua_State; idx: Integer): Pointer; cdecl;
- lua_tothread: function(L: lua_State; idx: Integer): lua_State; cdecl;
- lua_topointer: function(L: lua_State; idx: Integer): Pointer; cdecl;
-
-
- lua_pushnil: procedure(L: lua_State); cdecl;
- lua_pushnumber: procedure(L: lua_State; n: lua_Number); cdecl;
- lua_pushinteger: procedure(L: lua_State; n: lua_Integer); cdecl;
- lua_pushlstring: procedure(L: lua_State; s: PAnsiChar; len: Cardinal); cdecl;
- lua_pushstring: procedure(L: lua_State; s: PAnsiChar); cdecl;
- lua_pushvfstring: function(L: lua_State; fmt, argp: PAnsiChar): PAnsiChar; cdecl;
-
- lua_pushfstring: function(L: lua_State; fmt: PAnsiChar; args: array of const): PAnsiChar; cdecl;
- lua_pushcclosure: procedure(L: lua_State; fn: lua_CFunction; n: Integer); cdecl;
- lua_pushboolean: procedure(L: lua_State; b: LongBool); cdecl;
- lua_pushlightuserdata: procedure(L: lua_State; p: Pointer); cdecl;
- lua_pushthread: function(L: lua_State): Integer; cdecl;
-
-
- lua_gettable: procedure(L: lua_State; idx: Integer); cdecl;
- lua_getfield: procedure(L: lua_State; idx: Integer; k: PAnsiChar); cdecl;
- lua_rawget: procedure(L: lua_State; idx: Integer); cdecl;
- lua_rawgeti: procedure(L: lua_State; idx, n: Integer); cdecl;
- lua_createtable: procedure(L: lua_State; narr, nrec: Integer); cdecl;
- lua_newuserdata: function(L: lua_State; size: Cardinal): Pointer; cdecl;
- lua_getmetatable: function(L: lua_State; idx: Integer): LongBool; cdecl;
- lua_getfenv: procedure(L: lua_State; idx: Integer); cdecl;
-
-
- lua_settable: procedure(L: lua_State; idx: Integer); cdecl;
- lua_setfield: procedure(L: lua_State; idx: Integer; k: PAnsiChar ); cdecl;
- lua_rawset: procedure(L: lua_State; idx: Integer); cdecl;
- lua_rawseti: procedure(L: lua_State; idx, n: Integer); cdecl;
- lua_setmetatable: function(L: lua_State; idx: Integer): LongBool; cdecl;
- lua_setfenv: function(L: lua_State; idx: Integer): LongBool; cdecl;
-
-
- lua_call: procedure(L: lua_State; nargs, nresults: Integer); cdecl;
- lua_pcall: function(L: lua_State; nargs, nresults, errfunc: Integer): Integer; cdecl;
- lua_cpcall: function(L: lua_State; func: lua_CFunction; ud: Pointer): Integer; cdecl;
- lua_load: function(L: lua_State; reader: lua_Reader; data: Pointer; chunkname: PAnsiChar): Integer; cdecl;
- lua_dump: function(L: lua_State; writer: lua_Writer; data: Pointer): Integer; cdecl;
-
-
- lua_yield: function(L: lua_State; nresults: Integer): Integer; cdecl;
- lua_resume: function(L: lua_State; narg: Integer): Integer; cdecl;
- lua_status: function(L: lua_State): Integer; cdecl;
-
-
- lua_gc: function(L: lua_State; what, data: Integer): Integer; cdecl;
-
-
-
- lua_error: function(L: lua_State): Integer; cdecl;
- lua_next: function(L: lua_State; idx: Integer): Integer; cdecl;
- lua_concat: procedure(L: lua_State; n: Integer); cdecl;
-
- lua_getallocf: function(L: lua_State; ud: Pointer): lua_Alloc; cdecl;
- lua_setallocf: procedure(L: lua_State; f: lua_Alloc; ud: Pointer); cdecl;
-
-
-
- lua_getstack: function(L: lua_State; level: Integer; var ar: lua_Debug): Integer; cdecl;
- lua_getinfo: function(L: lua_State; what: PAnsiChar; var ar: lua_Debug): Integer; cdecl;
- lua_getlocal: function(L: lua_State; var ar: lua_Debug; n: Integer): PAnsiChar; cdecl;
- lua_setlocal: function(L: lua_State; var ar: lua_Debug; n: Integer): PAnsiChar; cdecl;
- lua_getupvalue: function(L: lua_State; funcindex, n: Integer): PAnsiChar; cdecl;
- lua_setupvalue: function(L: lua_State; funcindex, n: Integer): PAnsiChar; cdecl;
-
- lua_sethook: function(L: lua_State; func: lua_Hook; mask, count: Integer): Integer; cdecl;
- lua_gethook: function(L: lua_State): lua_Hook; cdecl;
- lua_gethookmask: function(L: lua_State): Integer; cdecl;
- lua_gethookcount: function(L: lua_State): Integer; cdecl;
-
-
- luaopen_base: function(L: lua_State): Integer; cdecl;
- luaopen_debug: function(L: lua_State): Integer; cdecl;
- luaopen_io: function(L: lua_State): Integer; cdecl;
- luaopen_math: function(L: lua_State): Integer; cdecl;
- luaopen_os: function(L: lua_State): Integer; cdecl;
- luaopen_package: function(L: lua_State): Integer; cdecl;
- luaopen_string: function(L: lua_State): Integer; cdecl;
- luaopen_table: function(L: lua_State): Integer; cdecl;
-
- luaL_openlibs: procedure(L: lua_State); cdecl;
-
- luaL_register: procedure(L: lua_State; libname: PAnsiChar; lr: PluaL_reg); cdecl;
- luaL_getmetafield: function(L: lua_State; obj: Integer; e: PAnsiChar): Integer; cdecl;
- luaL_callmeta: function(L: lua_State; obj: Integer; e: PAnsiChar): Integer; cdecl;
- luaL_typerror: function(L: lua_State; narg: Integer; tname: PAnsiChar): Integer; cdecl;
- luaL_argerror: function(L: lua_State; narg: Integer; extramsg: PAnsiChar): Integer; cdecl;
- luaL_checklstring: function(L: lua_State; narg: Integer; var len: Cardinal): PAnsiChar; cdecl;
- luaL_optlstring: function(L: lua_State; narg: Integer; d: PAnsiChar; var len: Cardinal): PAnsiChar; cdecl;
- luaL_checknumber: function(L: lua_State; narg: Integer): lua_Number; cdecl;
- luaL_optnumber: function(L: lua_State; narg: Integer; d: lua_Number): lua_Number; cdecl;
-
- luaL_checkinteger: function(L: lua_State; narg: Integer): lua_Integer; cdecl;
- luaL_optinteger: function(L: lua_State; narg: Integer; d: lua_Integer): lua_Integer; cdecl;
-
- luaL_checkstack: procedure(L: lua_State; sz: Integer; msg: PAnsiChar); cdecl;
- luaL_checktype: procedure(L: lua_State; narg, t: Integer); cdecl;
- luaL_checkany: procedure(L: lua_State; narg: Integer); cdecl;
-
- luaL_newmetatable: function(L: lua_State; tname: PAnsiChar): Integer; cdecl;
- luaL_checkudata: function(L: lua_State; narg: Integer; tname: PAnsiChar): Pointer; cdecl;
-
- luaL_checkoption: function(L: lua_State; narg: Integer; def: PAnsiChar; lst: array of PAnsiChar): Integer; cdecl;
-
- luaL_where: procedure(L: lua_State; lvl: Integer); cdecl;
- luaL_error: function(L: lua_State; fmt: PAnsiChar; args: array of const): Integer; cdecl;
-
- luaL_ref: function(L: lua_State; t: Integer): Integer; cdecl;
- luaL_unref: procedure(L: lua_State; t, ref: Integer); cdecl;
-
- {$ifdef LUA_COMPAT_GETN}
- luaL_getn: function(L: lua_State; t: Integer): Integer; cdecl;
- luaL_setn: procedure(L: lua_State; t, n: Integer); cdecl;
- {$endif}
-
- luaL_loadfile: function(L: lua_State; filename: PAnsiChar): Integer; cdecl;
- luaL_loadbuffer: function(L: lua_State; buff: PAnsiChar; sz: Cardinal; name: PAnsiChar): Integer; cdecl;
- luaL_loadstring: function(L: lua_State; s: PAnsiChar): Integer; cdecl;
-
- luaL_newstate: function(): lua_State; cdecl;
- luaL_gsub: function(L: lua_State; s, p, r: PAnsiChar): PAnsiChar; cdecl;
- luaL_findtable: function(L: lua_State; idx: Integer; fname: PAnsiChar; szhint: Integer): PAnsiChar; cdecl;
-
- luaL_buffinit: procedure(L: lua_State; var B: luaL_Buffer); cdecl;
- luaL_prepbuffer: function(var B: luaL_Buffer): PAnsiChar; cdecl;
- luaL_addlstring: procedure(var B: luaL_Buffer; s: PAnsiChar; l: Cardinal); cdecl;
- luaL_addstring: procedure(var B: luaL_Buffer; s: PAnsiChar); cdecl;
- luaL_addvalue: procedure(var B: luaL_Buffer); cdecl;
- luaL_pushresult: procedure(var B: luaL_Buffer); cdecl;
-
-
-
- {$ifndef LUA_COMPAT_GETN}
- function luaL_getn(L: lua_State; t: Integer): Integer;
- procedure luaL_setn(L: lua_State; t, n: Integer);
- {$endif}
-
-
- function lua_upvalueindex(i: Integer): Integer;
-
-
- procedure lua_assert(c: Boolean);
-
- function lua_number2str(s: Lua_Number; n: Integer): String;
- function lua_str2number(s: String; p: integer): Lua_Number;
-
-
- function luaL_argcheck(L: lua_State; cond: Boolean; narg: Integer; extramsg: PAnsiChar): Integer;
- function luaL_checkstring(L: lua_State; narg: Integer): PAnsiChar;
- function luaL_optstring(L: lua_State; narg: Integer; d: PAnsiChar): PAnsiChar;
- function luaL_checkint(L: lua_State; narg: Integer): Integer;
- function luaL_optint(L: lua_State; narg, d: Integer): Integer;
- function luaL_checklong(L: lua_State; narg: Integer): LongInt;
- function luaL_optlong(L: lua_State; narg: Integer; d: LongInt): LongInt;
-
- function luaL_typename(L: lua_State; idx: Integer): PAnsiChar;
- function luaL_dofile(L: lua_State; filename: PAnsiChar): Integer;
- function luaL_dostring(L: lua_State; str: PAnsiChar): Integer;
-
- procedure luaL_getmetatable(L: lua_State; tname: PAnsiChar);
-
-
- procedure luaL_addchar(var B: luaL_Buffer; c: AnsiChar);
- procedure luaL_putchar(var B: luaL_Buffer; c: AnsiChar);
- procedure luaL_addsize(var B: luaL_Buffer; n: Cardinal);
-
- function luaL_check_lstr(L: lua_State; numArg: Integer; var ls: Cardinal): PAnsiChar;
- function luaL_opt_lstr(L: lua_State; numArg: Integer; def: PAnsiChar; var ls: Cardinal): PAnsiChar;
- function luaL_check_number(L: lua_State; numArg: Integer): lua_Number;
- function luaL_opt_number(L: lua_State; nArg: Integer; def: lua_Number): lua_Number;
- function luaL_arg_check(L: lua_State; cond: Boolean; numarg: Integer; extramsg: PAnsiChar): Integer;
- function luaL_check_string(L: lua_State; n: Integer): PAnsiChar;
- function luaL_opt_string(L: lua_State; n: Integer; d: PAnsiChar): PAnsiChar;
- function luaL_check_int(L: lua_State; n: Integer): Integer;
- function luaL_check_long(L: lua_State; n: LongInt): LongInt;
- function luaL_opt_int(L: lua_State; n, d: Integer): Integer;
- function luaL_opt_long(L: lua_State; n: Integer; d: LongInt): LongInt;
-
- procedure lua_pop(L: lua_State; n: Integer);
- procedure lua_newtable(L: lua_State);
- procedure lua_register(L: lua_state; name: PAnsiChar; f: lua_CFunction);
- procedure lua_pushcfunction(L: lua_State; f: lua_CFunction);
- function lua_strlen(L: lua_State; i: Integer): Cardinal;
-
- function lua_isfunction(L: lua_State; idx: Integer): Boolean;
- function lua_istable(L: lua_State; idx: Integer): Boolean;
- function lua_islightuserdata(L: lua_State; idx: Integer): Boolean;
- function lua_isnil(L: lua_State; idx: Integer): Boolean;
- function lua_isboolean(L: lua_State; idx: Integer): Boolean;
- function lua_isthread(L: lua_State; idx: Integer): Boolean;
- function lua_isnone(L: lua_State; idx: Integer): Boolean;
- function lua_isnoneornil(L: lua_State; idx: Integer): Boolean;
-
- procedure lua_pushliteral(L: lua_State; s: PAnsiChar);
- procedure lua_setglobal(L: lua_State; name: PAnsiChar);
- procedure lua_getglobal(L: lua_State; name: PAnsiChar);
- function lua_tostring(L: lua_State; idx: Integer): PAnsiChar;
-
-
-
- function lua_open(): lua_State;
- procedure lua_getregistry(L: lua_State);
- function lua_getgccount(L: lua_State): Integer;
-
-
- function lua_ref(L: lua_State; lock: Boolean): Integer;
- procedure lua_unref(L: lua_State; ref: Integer);
- procedure lua_getref(L: lua_State; ref: Integer);
-
-
- function GetProcAddr( fHandle: THandle; const methodName: String; bErrorIfNotExists: Boolean = True ): Pointer;
- procedure SetLuaLibFileName( newLuaLibFileName: String );
- function GetLuaLibFileName(): String;
- function LoadLuaLib( newLuaLibFileName: String = ‘‘ ): Integer;
- procedure FreeLuaLib();
- function LuaLibLoaded: Boolean;
-
- implementation
-
- uses
- SysUtils, Math,
- {$ifdef MSWINDOWS}
- Windows
- {$endif}
- ;
-
- var
- fLibHandle: Integer = 0;
- {$ifdef MSWINDOWS}
- fLuaLibFileName: String = ‘Lua5.1.dll‘;
- {$endif}
- {$ifdef LINUX}
- fLuaLibFileName: String = ‘liblua.so.5.1‘;
- {$endif}
-
-
- function GetProcAddr( fHandle: THandle; const methodName: String; bErrorIfNotExists: Boolean = True ): Pointer;
- begin
- Result := GetProcAddress( fHandle, PAnsiChar( AnsiString(methodName) ) );
-
- if bErrorIfNotExists and ( Result = nil ) then
- Raise Exception.Create( ‘Cannot load method ‘ + QuotedStr( methodName ) + ‘ from dynamic library.‘ );
- end;
-
- procedure SetLuaLibFileName( newLuaLibFileName: String );
- begin
- fLuaLibFileName := newLuaLibFileName;
- end;
-
- function GetLuaLibFileName(): String;
- begin
- Result := fLuaLibFileName;
- end;
-
- function LuaLibLoaded: Boolean;
- begin
- Result := fLibHandle <> 0;
- end;
-
-
-
- function LoadLuaLib(newLuaLibFileName: String): Integer;
- begin
- FreeLuaLib();
-
- if newLuaLibFileName <> ‘‘ then
- SetLuaLibFileName( newLuaLibFileName );
-
- if not FileExists( GetLuaLibFileName() ) then begin
- Result := -1;
- exit;
- end;
-
- fLibHandle := LoadLibrary(PWideChar( (GetLuaLibFileName() ) ));
-
- if fLibHandle = 0 then begin
- Result := -2;
- exit;
- end;
-
- lua_newstate := GetProcAddr( fLibHandle, ‘lua_newstate‘ );
- lua_close := GetProcAddr( fLibHandle, ‘lua_close‘ );
- lua_newthread := GetProcAddr( fLibHandle, ‘lua_newthread‘ );
- lua_atpanic := GetProcAddr( fLibHandle, ‘lua_atpanic‘ );
- lua_gettop := GetProcAddr( fLibHandle, ‘lua_gettop‘ );
- lua_settop := GetProcAddr( fLibHandle, ‘lua_settop‘ );
- lua_pushvalue := GetProcAddr( fLibHandle, ‘lua_pushvalue‘ );
- lua_remove := GetProcAddr( fLibHandle, ‘lua_remove‘ );
- lua_insert := GetProcAddr( fLibHandle, ‘lua_insert‘ );
- lua_replace := GetProcAddr( fLibHandle, ‘lua_replace‘ );
- lua_checkstack := GetProcAddr( fLibHandle, ‘lua_checkstack‘ );
- lua_xmove := GetProcAddr( fLibHandle, ‘lua_xmove‘ );
- lua_isnumber := GetProcAddr( fLibHandle, ‘lua_isnumber‘ );
- lua_isstring := GetProcAddr( fLibHandle, ‘lua_isstring‘ );
- lua_iscfunction := GetProcAddr( fLibHandle, ‘lua_iscfunction‘ );
- lua_isuserdata := GetProcAddr( fLibHandle, ‘lua_isuserdata‘ );
- lua_type := GetProcAddr( fLibHandle, ‘lua_type‘ );
- lua_typename := GetProcAddr( fLibHandle, ‘lua_typename‘ );
- lua_equal := GetProcAddr( fLibHandle, ‘lua_equal‘ );
- lua_rawequal := GetProcAddr( fLibHandle, ‘lua_rawequal‘ );
- lua_lessthan := GetProcAddr( fLibHandle, ‘lua_lessthan‘ );
- lua_tonumber := GetProcAddr( fLibHandle, ‘lua_tonumber‘ );
- lua_tointeger := GetProcAddr( fLibHandle, ‘lua_tointeger‘ );
- lua_toboolean := GetProcAddr( fLibHandle, ‘lua_toboolean‘ );
- lua_tolstring := GetProcAddr( fLibHandle, ‘lua_tolstring‘ );
- lua_objlen := GetProcAddr( fLibHandle, ‘lua_objlen‘ );
- lua_tocfunction := GetProcAddr( fLibHandle, ‘lua_tocfunction‘ );
- lua_touserdata := GetProcAddr( fLibHandle, ‘lua_touserdata‘ );
- lua_tothread := GetProcAddr( fLibHandle, ‘lua_tothread‘ );
- lua_topointer := GetProcAddr( fLibHandle, ‘lua_topointer‘ );
- lua_pushnil := GetProcAddr( fLibHandle, ‘lua_pushnil‘ );
- lua_pushnumber := GetProcAddr( fLibHandle, ‘lua_pushnumber‘ );
- lua_pushinteger := GetProcAddr( fLibHandle, ‘lua_pushinteger‘ );
- lua_pushlstring := GetProcAddr( fLibHandle, ‘lua_pushlstring‘ );
- lua_pushstring := GetProcAddr( fLibHandle, ‘lua_pushstring‘ );
- lua_pushvfstring := GetProcAddr( fLibHandle, ‘lua_pushvfstring‘ );
- lua_pushfstring := GetProcAddr( fLibHandle, ‘lua_pushfstring‘ );
- lua_pushcclosure := GetProcAddr( fLibHandle, ‘lua_pushcclosure‘ );
- lua_pushboolean := GetProcAddr( fLibHandle, ‘lua_pushboolean‘ );
- lua_pushlightuserdata := GetProcAddr( fLibHandle, ‘lua_pushlightuserdata‘ );
- lua_pushthread := GetProcAddr( fLibHandle, ‘lua_pushthread‘ );
- lua_gettable := GetProcAddr( fLibHandle, ‘lua_gettable‘ );
- lua_getfield := GetProcAddr( fLibHandle, ‘lua_getfield‘ );
- lua_rawget := GetProcAddr( fLibHandle, ‘lua_rawget‘ );
- lua_rawgeti := GetProcAddr( fLibHandle, ‘lua_rawgeti‘ );
- lua_createtable := GetProcAddr( fLibHandle, ‘lua_createtable‘ );
- lua_newuserdata := GetProcAddr( fLibHandle, ‘lua_newuserdata‘ );
- lua_getmetatable := GetProcAddr( fLibHandle, ‘lua_getmetatable‘ );
- lua_getfenv := GetProcAddr( fLibHandle, ‘lua_getfenv‘ );
- lua_settable := GetProcAddr( fLibHandle, ‘lua_settable‘ );
- lua_setfield := GetProcAddr( fLibHandle, ‘lua_setfield‘ );
- lua_rawset := GetProcAddr( fLibHandle, ‘lua_rawset‘ );
- lua_rawseti := GetProcAddr( fLibHandle, ‘lua_rawseti‘ );
- lua_setmetatable := GetProcAddr( fLibHandle, ‘lua_setmetatable‘ );
- lua_setfenv := GetProcAddr( fLibHandle, ‘lua_setfenv‘ );
- lua_call := GetProcAddr( fLibHandle, ‘lua_call‘ );
- lua_pcall := GetProcAddr( fLibHandle, ‘lua_pcall‘ );
- lua_cpcall := GetProcAddr( fLibHandle, ‘lua_cpcall‘ );
- lua_load := GetProcAddr( fLibHandle, ‘lua_load‘ );
- lua_dump := GetProcAddr( fLibHandle, ‘lua_dump‘ );
- lua_yield := GetProcAddr( fLibHandle, ‘lua_yield‘ );
- lua_resume := GetProcAddr( fLibHandle, ‘lua_resume‘ );
- lua_status := GetProcAddr( fLibHandle, ‘lua_status‘ );
- lua_gc := GetProcAddr( fLibHandle, ‘lua_gc‘ );
- lua_error := GetProcAddr( fLibHandle, ‘lua_error‘ );
- lua_next := GetProcAddr( fLibHandle, ‘lua_next‘ );
- lua_concat := GetProcAddr( fLibHandle, ‘lua_concat‘ );
- lua_getallocf := GetProcAddr( fLibHandle, ‘lua_getallocf‘ );
- lua_setallocf := GetProcAddr( fLibHandle, ‘lua_setallocf‘ );
- lua_getstack := GetProcAddr( fLibHandle, ‘lua_getstack‘ );
- lua_getinfo := GetProcAddr( fLibHandle, ‘lua_getinfo‘ );
- lua_getlocal := GetProcAddr( fLibHandle, ‘lua_getlocal‘ );
- lua_setlocal := GetProcAddr( fLibHandle, ‘lua_setlocal‘ );
- lua_getupvalue := GetProcAddr( fLibHandle, ‘lua_getupvalue‘ );
- lua_setupvalue := GetProcAddr( fLibHandle, ‘lua_setupvalue‘ );
- lua_sethook := GetProcAddr( fLibHandle, ‘lua_sethook‘ );
- lua_gethook := GetProcAddr( fLibHandle, ‘lua_gethook‘ );
- lua_gethookmask := GetProcAddr( fLibHandle, ‘lua_gethookmask‘ );
- lua_gethookcount := GetProcAddr( fLibHandle, ‘lua_gethookcount‘ );
- luaopen_base := GetProcAddr( fLibHandle, ‘luaopen_base‘ );
- luaopen_table := GetProcAddr( fLibHandle, ‘luaopen_table‘ );
- luaopen_io := GetProcAddr( fLibHandle, ‘luaopen_io‘ );
- luaopen_os := GetProcAddr( fLibHandle, ‘luaopen_os‘ );
- luaopen_string := GetProcAddr( fLibHandle, ‘luaopen_string‘ );
- luaopen_math := GetProcAddr( fLibHandle, ‘luaopen_math‘ );
- luaopen_debug := GetProcAddr( fLibHandle, ‘luaopen_debug‘ );
- luaopen_package := GetProcAddr( fLibHandle, ‘luaopen_package‘ );
- luaL_openlibs := GetProcAddr( fLibHandle, ‘luaL_openlibs‘ );
- luaL_register := GetProcAddr( fLibHandle, ‘luaL_register‘ );
- luaL_getmetafield := GetProcAddr( fLibHandle, ‘luaL_getmetafield‘ );
- luaL_callmeta := GetProcAddr( fLibHandle, ‘luaL_callmeta‘ );
- luaL_typerror := GetProcAddr( fLibHandle, ‘luaL_typerror‘ );
- luaL_argerror := GetProcAddr( fLibHandle, ‘luaL_argerror‘ );
- luaL_checklstring := GetProcAddr( fLibHandle, ‘luaL_checklstring‘ );
- luaL_optlstring := GetProcAddr( fLibHandle, ‘luaL_optlstring‘ );
- luaL_checknumber := GetProcAddr( fLibHandle, ‘luaL_checknumber‘ );
- luaL_optnumber := GetProcAddr( fLibHandle, ‘luaL_optnumber‘ );
- luaL_checkinteger := GetProcAddr( fLibHandle, ‘luaL_checkinteger‘ );
- luaL_optinteger := GetProcAddr( fLibHandle, ‘luaL_optinteger‘ );
- luaL_checkstack := GetProcAddr( fLibHandle, ‘luaL_checkstack‘ );
- luaL_checktype := GetProcAddr( fLibHandle, ‘luaL_checktype‘ );
- luaL_checkany := GetProcAddr( fLibHandle, ‘luaL_checkany‘ );
- luaL_newmetatable := GetProcAddr( fLibHandle, ‘luaL_newmetatable‘ );
- luaL_checkudata := GetProcAddr( fLibHandle, ‘luaL_checkudata‘ );
- luaL_where := GetProcAddr( fLibHandle, ‘luaL_where‘ );
- luaL_error := GetProcAddr( fLibHandle, ‘luaL_error‘ );
- luaL_checkoption := GetProcAddr( fLibHandle, ‘luaL_checkoption‘ );
- luaL_ref := GetProcAddr( fLibHandle, ‘luaL_ref‘ );
- luaL_unref := GetProcAddr( fLibHandle, ‘luaL_unref‘ );
- {$ifdef LUA_COMPAT_GETN}
- luaL_getn := GetProcAddr( fLibHandle, ‘luaL_getn‘ );
- luaL_setn := GetProcAddr( fLibHandle, ‘luaL_setn‘ );
- {$endif}
- luaL_loadfile := GetProcAddr( fLibHandle, ‘luaL_loadfile‘ );
- luaL_loadbuffer := GetProcAddr( fLibHandle, ‘luaL_loadbuffer‘ );
- luaL_loadstring := GetProcAddr( fLibHandle, ‘luaL_loadstring‘ );
- luaL_newstate := GetProcAddr( fLibHandle, ‘luaL_newstate‘ );
- luaL_gsub := GetProcAddr( fLibHandle, ‘luaL_gsub‘ );
- luaL_findtable := GetProcAddr( fLibHandle, ‘luaL_findtable‘ );
- luaL_buffinit := GetProcAddr( fLibHandle, ‘luaL_buffinit‘ );
- luaL_prepbuffer := GetProcAddr( fLibHandle, ‘luaL_prepbuffer‘ );
- luaL_addlstring := GetProcAddr( fLibHandle, ‘luaL_addlstring‘ );
- luaL_addstring := GetProcAddr( fLibHandle, ‘luaL_addstring‘ );
- luaL_addvalue := GetProcAddr( fLibHandle, ‘luaL_addvalue‘ );
- luaL_pushresult := GetProcAddr( fLibHandle, ‘luaL_pushresult‘ );
-
- Result := fLibHandle;
- end;
-
- procedure FreeLuaLib();
- begin
- lua_newstate := nil;
- lua_close := nil;
- lua_newthread := nil;
- lua_atpanic := nil;
- lua_gettop := nil;
- lua_settop := nil;
- lua_pushvalue := nil;
- lua_remove := nil;
- lua_insert := nil;
- lua_replace := nil;
- lua_checkstack := nil;
- lua_xmove := nil;
- lua_isnumber := nil;
- lua_isstring := nil;
- lua_iscfunction := nil;
- lua_isuserdata := nil;
- lua_type := nil;
- lua_typename := nil;
- lua_equal := nil;
- lua_rawequal := nil;
- lua_lessthan := nil;
- lua_tonumber := nil;
- lua_tointeger := nil;
- lua_toboolean := nil;
- lua_tolstring := nil;
- lua_objlen := nil;
- lua_tocfunction := nil;
- lua_touserdata := nil;
- lua_tothread := nil;
- lua_topointer := nil;
- lua_pushnil := nil;
- lua_pushnumber := nil;
- lua_pushinteger := nil;
- lua_pushlstring := nil;
- lua_pushstring := nil;
- lua_pushvfstring := nil;
- lua_pushfstring := nil;
- lua_pushcclosure := nil;
- lua_pushboolean := nil;
- lua_pushlightuserdata := nil;
- lua_pushthread := nil;
- lua_gettable := nil;
- lua_getfield := nil;
- lua_rawget := nil;
- lua_rawgeti := nil;
- lua_createtable := nil;
- lua_newuserdata := nil;
- lua_getmetatable := nil;
- lua_getfenv := nil;
- lua_settable := nil;
- lua_setfield := nil;
- lua_rawset := nil;
- lua_rawseti := nil;
- lua_setmetatable := nil;
- lua_setfenv := nil;
- lua_call := nil;
- lua_pcall := nil;
- lua_cpcall := nil;
- lua_load := nil;
- lua_dump := nil;
- lua_yield := nil;
- lua_resume := nil;
- lua_status := nil;
- lua_gc := nil;
- lua_error := nil;
- lua_next := nil;
- lua_concat := nil;
- lua_getallocf := nil;
- lua_setallocf := nil;
- lua_getstack := nil;
- lua_getinfo := nil;
- lua_getlocal := nil;
- lua_setlocal := nil;
- lua_getupvalue := nil;
- lua_setupvalue := nil;
- lua_sethook := nil;
- lua_gethook := nil;
- lua_gethookmask := nil;
- lua_gethookcount := nil;
- luaopen_base := nil;
- luaopen_table := nil;
- luaopen_io := nil;
- luaopen_os := nil;
- luaopen_string := nil;
- luaopen_math := nil;
- luaopen_debug := nil;
- luaopen_package := nil;
- luaL_openlibs := nil;
- luaL_register := nil;
- luaL_getmetafield := nil;
- luaL_callmeta := nil;
- luaL_typerror := nil;
- luaL_argerror := nil;
- luaL_checklstring := nil;
- luaL_optlstring := nil;
- luaL_checknumber := nil;
- luaL_optnumber := nil;
- luaL_checkinteger := nil;
- luaL_optinteger := nil;
- luaL_checkstack := nil;
- luaL_checktype := nil;
- luaL_checkany := nil;
- luaL_newmetatable := nil;
- luaL_checkudata := nil;
- luaL_where := nil;
- luaL_error := nil;
- luaL_checkoption := nil;
- luaL_ref := nil;
- luaL_unref := nil;
- {$ifdef LUA_COMPAT_GETN}
- luaL_getn := nil;
- luaL_setn := nil;
- {$endif}
- luaL_loadfile := nil;
- luaL_loadbuffer := nil;
- luaL_loadstring := nil;
- luaL_newstate := nil;
- luaL_gsub := nil;
- luaL_findtable := nil;
- luaL_buffinit := nil;
- luaL_prepbuffer := nil;
- luaL_addlstring := nil;
- luaL_addstring := nil;
- luaL_addvalue := nil;
- luaL_pushresult := nil;
-
- if fLibHandle <> 0 then begin
- FreeLibrary( fLibHandle );
- fLibHandle := 0;
- end;
- end;
-
- {$ifndef LUA_COMPAT_GETN}
- function luaL_getn(L: lua_State; t: Integer): Integer;
- begin
- Result := lua_objlen(L, t);
- end;
-
- procedure luaL_setn(L: lua_State; t, n: Integer);
- begin
- end;
- {$endif}
-
- function lua_upvalueindex(i: Integer): Integer;
- begin
- Result := LUA_GLOBALSINDEX - i;
- end;
-
- procedure lua_pop(L: lua_State; n: Integer);
- begin
- lua_settop(L, -(n) - 1);
- end;
-
- procedure lua_newtable(L: lua_State);
- begin
- lua_createtable(L, 0, 0);
- end;
-
- function lua_strlen(L: lua_State; i: Integer): Cardinal;
- begin
- result := lua_objlen(L, i);
- end;
-
- procedure lua_register(L: lua_state; name: PAnsiChar; f: lua_CFunction);
- begin
- lua_pushcfunction(L, f);
- lua_setglobal(L, name);
- end;
-
- procedure lua_pushcfunction(L: lua_State; f: lua_CFunction);
- begin
- lua_pushcclosure(L, f, 0);
- end;
-
- function lua_isfunction(L: lua_State; idx: Integer): Boolean;
- begin
- Result := lua_type(L, idx) = LUA_TFUNCTION;
- end;
-
- function lua_istable(L: lua_State; idx: Integer): Boolean;
- begin
- Result := lua_type(L, idx) = LUA_TTABLE;
- end;
-
- function lua_islightuserdata(L: lua_State; idx: Integer): Boolean;
- begin
- Result := lua_type(L, idx) = LUA_TLIGHTUSERDATA;
- end;
-
- function lua_isnil(L: lua_State; idx: Integer): Boolean;
- begin
- Result := lua_type(L, idx) = LUA_TNIL;
- end;
-
- function lua_isboolean(L: lua_State; idx: Integer): Boolean;
- begin
- Result := lua_type(L, idx) = LUA_TBOOLEAN;
- end;
-
- function lua_isthread(L: lua_State; idx: Integer): Boolean;
- begin
- Result := lua_type(L, idx) = LUA_TTHREAD;
- end;
-
- function lua_isnone(L: lua_State; idx: Integer): Boolean;
- begin
- Result := lua_type(L, idx) = LUA_TNONE;
- end;
-
- function lua_isnoneornil(L: lua_State; idx: Integer): Boolean;
- begin
- Result := lua_type(L, idx) <= 0;
- end;
-
- procedure lua_pushliteral(L: lua_State; s: PAnsiChar);
- begin
- lua_pushlstring(L, s, StrLen(s));
- end;
-
- procedure lua_setglobal(L: lua_State; name: PAnsiChar);
- begin
- lua_setfield(L, LUA_GLOBALSINDEX, name);
- end;
-
- procedure lua_getglobal(L: lua_State; name: PAnsiChar);
- begin
- lua_getfield(L, LUA_GLOBALSINDEX, name);
- end;
-
- function lua_tostring(L: lua_State; idx: Integer): PAnsiChar;
- var
- len: Cardinal;
- begin
- Result := lua_tolstring(L, idx, len);
- end;
-
- function lua_getgccount(L: lua_State): Integer;
- begin
- Result := lua_gc(L, LUA_GCCOUNT, 0);
- end;
-
- function lua_open(): lua_State;
- begin
- Result := luaL_newstate();
- end;
-
- procedure lua_getregistry(L: lua_State);
- begin
- lua_pushvalue(L, LUA_REGISTRYINDEX);
- end;
-
- function lua_ref(L: lua_State; lock: Boolean): Integer;
- begin
- if lock then
- Result := luaL_ref(L, LUA_REGISTRYINDEX)
- else begin
- lua_pushstring(L, ‘unlocked references are obsolete‘);
- Result := lua_error(L);
- end;
- end;
-
- procedure lua_unref(L: lua_State; ref: Integer);
- begin
- luaL_unref(L, LUA_REGISTRYINDEX, ref);
- end;
-
- procedure lua_getref(L: lua_State; ref: Integer);
- begin
- lua_rawgeti(L, LUA_REGISTRYINDEX, ref);
- end;
-
- procedure lua_assert(c: Boolean);
- begin
- end;
-
- function lua_number2str(s: Lua_Number; n: Integer): String;
- begin
- Result := FormatFloat( LUA_NUMBER_FMT, RoundTo( s, n ) );
- end;
-
- function lua_str2number(s: String; p: integer): Lua_Number;
- begin
- Result := RoundTo( StrToFloat( s ), p );
- end;
-
- function luaL_argcheck(L: lua_State; cond: Boolean; narg: Integer; extramsg: PAnsiChar): Integer;
- begin
- if cond then
- Result := 0
- else
- Result := luaL_argerror(L, narg, extramsg);
- end;
-
- function luaL_checkstring(L: lua_State; narg: Integer): PAnsiChar;
- var
- ls: Cardinal;
- begin
- Result := luaL_checklstring(L, narg, ls);
- end;
-
- function luaL_optstring(L: lua_State; narg: Integer; d: PAnsiChar): PAnsiChar;
- var
- ls: Cardinal;
- begin
- Result := luaL_optlstring(L, narg, d, ls);
- end;
-
- function luaL_checkint(L: lua_State; narg: Integer): Integer;
- begin
- Result := Trunc(luaL_checkinteger(L, narg));
- end;
-
- function luaL_optint(L: lua_State; narg, d: Integer): Integer;
- begin
- Result := Trunc(luaL_optinteger(L, narg, d));
- end;
-
- function luaL_checklong(L: lua_State; narg: Integer): LongInt;
- begin
- Result := Trunc(luaL_checkinteger(L, narg));
- end;
-
- function luaL_optlong(L: lua_State; narg: Integer; d: LongInt): LongInt;
- begin
- Result := Trunc(luaL_optinteger(L, narg, d));
- end;
-
- function luaL_typename(L: lua_State; idx: Integer): PAnsiChar;
- begin
- Result := lua_typename(L, lua_type(L, idx));
- end;
-
- function luaL_dofile(L: lua_State; filename: PAnsiChar): Integer;
- begin
- Result := luaL_loadfile(L, filename);
-
- If Result = 0 Then
- Result := lua_pcall(L, 0, LUA_MULTRET, 0);
- end;
-
- function luaL_dostring(L: lua_State; str: PAnsiChar): Integer;
- begin
- Result := luaL_loadstring(L, str);
-
- If Result = 0 Then
- Result := lua_pcall(L, 0, LUA_MULTRET, 0);
- end;
-
- procedure luaL_getmetatable(L: lua_State; tname: PAnsiChar);
- begin
- lua_getfield(L, LUA_REGISTRYINDEX, tname);
- end;
-
- procedure luaL_addchar(var B: luaL_Buffer; c: AnsiChar);
- begin
- if Integer(B.p) < Integer(B.buffer + LUAL_BUFFERSIZE) then
- luaL_prepbuffer(B);
-
- B.p^ := c;
- Inc(B.p);
- end;
-
- procedure luaL_putchar(var B: luaL_Buffer; c: AnsiChar);
- begin
- luaL_addchar(B, c);
- end;
-
- procedure luaL_addsize(var B: luaL_Buffer; n: Cardinal);
- begin
- Inc(B.p, n);
- end;
-
- function luaL_check_lstr(L: lua_State; numArg: Integer; var ls: Cardinal): PAnsiChar;
- begin
- Result := luaL_checklstring(L, numArg, ls);
- end;
-
- function luaL_opt_lstr(L: lua_State; numArg: Integer; def: PAnsiChar; var ls: Cardinal): PAnsiChar;
- begin
- Result := luaL_optlstring(L, numArg, def, ls);
- end;
-
- function luaL_check_number(L: lua_State; numArg: Integer): lua_Number;
- begin
- Result := luaL_checknumber(L, numArg);
- end;
-
- function luaL_opt_number(L: lua_State; nArg: Integer; def: lua_Number): lua_Number;
- begin
- Result := luaL_optnumber(L, nArg, def);
- end;
-
- function luaL_arg_check(L: lua_State; cond: Boolean; numarg: Integer; extramsg: PAnsiChar): Integer;
- begin
- Result := luaL_argcheck(L, cond, numarg, extramsg);
- end;
-
- function luaL_check_string(L: lua_State; n: Integer): PAnsiChar;
- begin
- Result := luaL_checkstring(L, n);
- end;
-
- function luaL_opt_string(L: lua_State; n: Integer; d: PAnsiChar): PAnsiChar;
- begin
- Result := luaL_optstring(L, n, d);
- end;
-
- function luaL_check_int(L: lua_State; n: Integer): Integer;
- begin
- Result := luaL_checkint(L, n);
- end;
-
- function luaL_check_long(L: lua_State; n: LongInt): LongInt;
- begin
- Result := luaL_checklong(L, n);
- end;
-
- function luaL_opt_int(L: lua_State; n, d: Integer): Integer;
- begin
- Result := luaL_optint(L, n, d);
- end;
-
- function luaL_opt_long(L: lua_State; n: Integer; d: LongInt): LongInt;
- begin
- Result := luaL_optlong(L, n, d);
- end;
-
- end.
delphi调用LUA函数来处理一些逻辑
原文:http://www.cnblogs.com/yzryc/p/6401803.html