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

📄 rectest.pas

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

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, pLuaRecord, lua, plua;

type
  PMyRecord = ^TMyRecord;
  TMyRecord = record
    AString : AnsiString;
    Int     : Integer;
    Num     : Double;
  end;

procedure RegisterMyRecordType( L : Plua_State );
procedure RegisterExistingMyRecord( L : Plua_State; InstanceName : AnsiString; RecordPointer : Pointer);

var
  MyRecordInfo : TLuaRecordInfo;

implementation

function getAString(RecordPointer : pointer; l : Plua_State; paramidxstart, paramcount : integer) : Integer;
begin
  plua_pushstring(L, PMyRecord(RecordPointer)^.AString);
  result := 1;
end;

function setAString(RecordPointer : pointer; l : Plua_State; paramidxstart, paramcount : integer) : Integer;
begin
  PMyRecord(RecordPointer)^.AString := plua_tostring(l, paramidxstart);
  result := 0;
end;

function getInt(RecordPointer : pointer; l : Plua_State; paramidxstart, paramcount : integer) : Integer;
begin
  lua_pushinteger(L, PMyRecord(RecordPointer)^.Int);
  result := 1;
end;

function setInt(RecordPointer : pointer; l : Plua_State; paramidxstart, paramcount : integer) : Integer;
begin
  PMyRecord(RecordPointer)^.Int := lua_tointeger(l, paramidxstart);
  result := 0;
end;

function getnumber(RecordPointer : pointer; l : Plua_State; paramidxstart, paramcount : integer) : integer;
begin
  lua_pushnumber(L, PMyRecord(RecordPointer)^.Num);
  result := 1;
end;

function setnumber(RecordPointer : pointer; l : Plua_State; paramidxstart, paramcount : integer) : integer;
begin
  PMyRecord(RecordPointer)^.Num := lua_tonumber(l, paramidxstart);
  result := 0;
end;

function newMyRecord(l : Plua_State; paramidxstart, paramcount : integer; InstanceInfo : PLuaRecordInstanceInfo) : Pointer;
var
  r : PMyRecord;
begin
  new(r);
  result := r;
end;

procedure disposeMyRecord( RecordPointer : pointer; l : Plua_State );
begin
  Freemem(PMyRecord(RecordPointer));
end;

function MyProcInfo : TLuaRecordInfo;
begin
  plua_initRecordInfo(Result);
  result.RecordName := 'MyRecord';
  result.New := @newMyRecord;
  result.Release := @disposeMyRecord;
  plua_AddRecordProperty(result, 'AString', @getAString, @setAString);
  plua_AddRecordProperty(result, 'Int', @getInt, @setInt);
  plua_AddRecordProperty(result, 'Num', @getnumber, @setnumber);
end;

procedure RegisterMyRecordType(L: Plua_State);
begin
  plua_registerRecordType(l, MyRecordInfo);
end;

procedure RegisterExistingMyRecord(L: Plua_State; InstanceName: AnsiString;
  RecordPointer: Pointer);
begin
  plua_registerExistingRecord(L, InstanceName, RecordPointer, @MyRecordInfo);
end;

initialization
  MyRecordInfo := MyProcInfo;

finalization

end.

⌨️ 快捷键说明

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