unit LuaFuncImpl;
interface
uses lua53, lauxlib, lualib,Registry;
function forLua_str(L: Plua_State): Integer; cdecl;
function forLua_rstr(L: Plua_State): Integer; cdecl;
var s:pansistring;
implementation
uses Windows, SysUtils;
procedure Regstring(name, param : string); // реестр запись
var
reg : TRegIniFile;
begin
reg := TRegIniFile.Create('');
reg.RootKey := HKEY_LOCAL_MACHINE;
// добавляем
try
reg.WriteString('Software\Leopold',name,param) ;
except //если нет такого ключа создаем
begin
reg.CreateKey('Leopold');
reg.WriteString('Software\Leopold',name,param) ;
end;
end;
//освобождаем память
reg.Free;
end;
function Regstringread(name : string):string; // реестр чтение
var
reg : TRegIniFile;
begin
reg := TRegIniFile.Create('');
reg.RootKey := HKEY_LOCAL_MACHINE;
try // читаем
result:=reg.readString('Software\Leopold',name,'') ;
except //ловим
result:='ошибка чтения реестра';
end;
//освобождаем память
reg.Free;
end;
function forLua_str(L: Plua_State): Integer; cdecl;//пишем строку в реестр пытаемся записать для дельфи в переменную
//первый аргумент название второй строка
//вызываем в луа названиедлл.str("имя параметра","значение")
var
n,i: Integer;
ISTRFOUND: Boolean;
name,res: pansichar;
begin
n := lua_gettop(L); // количество переданных аргументов из луа
ISTRFOUND := false;
for i := 1 to n do
begin
if lua_type(L,i) = LUA_TSTRING then //проверка на стринг
begin
res :=lua_tostring(L,i); //записываем строку
if i=1 then name:=res;//первай аргумент имя в реестре
ISTRFOUND := true; //если аргументов более 2х в принципе можно сделать мультизапись пока не нужно
end;
end;
if ISTRFOUND then
begin
// если найдено хоть однa строка
Regstring(name,res); //добавляем в реестр
s:=pansistring(res);// лажа не работает
//lua_pushstring(L,pansichar(s)) это пишет в луа по указателю l данные s
end
else
lua_pushnil(L);// если список аргументов пуст или в нем нет строки - функция вернет nil
Result := 1; // возвращаемое количество результатов
end;
function forLua_rstr(L: Plua_State): Integer; cdecl;//*чтение с реестра переменной
//вызываем в луа названиедлл.str("имя параметра")
var n:integer;
begin //данная функция запишет параметр из реестра в луа
if lua_type(L,1) = LUA_TSTRING then //параметр из луа строка
lua_pushstring(L,Regstringread(lua_tostring(L,1)))//параметр будет являтся именем переменной в реестре
else lua_pushstring(L,pansichar('имя аргумента не является строкой'));// при ошибке возвращаем в луа
Result := 1;// возвращаемое количество результатов
end;
function strtodelphi():string;stdcall //это вызываем из дельфи получаем строго 'неудача'
begin
if s<>nil then Result:=string(s) else result:='неудача';
end;
exports strtodelphi;
end.
через реестр все прекрасно вносится напрямую дельфи с длл читать не хочет
dll=require "SimpleDelphiLua"
local is_run = true
function onclose()
is_run = false
end
function main()
while is_run do
wrreestr()
sleep(3000)
end
end
function wrreestr() -- запись текущих значен в реестр для обработки отображения параметров для делфи
if dll.rstr('какоето_название')~='какая то строка' then
dll.str('какоето_название','какая то строка')
end
end