Проблемы SEH предотвращают должным образом эту библиотеку с Delphi. Развитие переходит на https://github.com/tinybiggames/callisto, что не страдает от этих и других проблем.

Jetlua - это продвинутая библиотека интеграции Luajit, тщательно изготовленную для разработчиков Delphi, обеспечивая беспроблемный интерфейс между приложениями Delphi и сценариями Luajit. Объединяя неотъемлемая надежность Дельфи? Благодаря исключительной эффективности времени выполнения компиляции Luajit в соответствии с временем (JIT), Jetlua оптимизирован для профессиональных разработчиков, стремящихся включить динамические ⚡ возможностей в свое программное обеспечение без ущерба для производительности или стабильности.
Jetlua интегрирует Luajit версию 2.1+, статически собранную в ваше приложение Delphi, устраняя необходимость внешних зависимостей DLL? Это значительно повышает портативность? применения, упрощает распределение и облегчает включение возможностей сценариев в средах Delphi.
Используя Jetlua, разработчики могут подвергать методы классов Delphi для сценариев LUA, тем самым придавая их приложениям динамическим расширением? Библиотека использует RTTI Delphi (информация типа времени выполнения)? для облегчения эффективной регистрации и интеграции с Луаджитом оптимизированным образом.
Более того, Jetlua использует мощный интерфейс внешней функции (FFI)? Предлагается Luajit, что позволяет экспортируемым процедурам Delphi/DLL быть непосредственно зарегистрирована и использована в сценариях LUA. Использование FFI устраняет необходимость для сложных промежуточных связей, облегчая более быструю и более эффективную интеграцию между Delphi и Luajit.
dbg() в код Luajit инициирует интерактивную сеанс отладки, необходимую для идентификации проблемы выполнения.import позволяют объединять сценарии, скомпилированные в единый блок и опционально встроенные в качестве ресурса EXE, что приводит к полностью автономному приложению. Чтобы начать использовать Jetlua, выполните эти шаги:
Программа Testbed содержит всеобъемлющий пример возможностей Jetlua, демонстрируя интеграцию сценариев Luajit с приложением Delphi. Ключевые функции, проиллюстрированные, включают в себя арифметические операции ➕, манипуляция строк ✂, обработка записи, управление памятью? И сложная обработка ошибок
print ( " Testing TTestClass methods... " )
print ( " Add: " , TTestClass . Add ( 5 , 3 ))
print ( " Multiply: " , TTestClass . Multiply ( 4.5 , 2.0 ))
print ( " Concat: " , TTestClass . Concat ( " Hello " , " World " ))
-- Record handling example
local rec = TTestClass . CreateRecord ( 1 , " Test Record " , 42.0 )
print ( " Initial Record Value: " , TTestClass . GetRecordValue ( rec ))
TTestClass . UpdateRecord ( rec , 100.0 )
print ( " Updated Record Value: " , TTestClass . GetRecordValue ( rec ))
-- Memory management example
local mem = TTestClass . AllocateMemory ( 4 )
TTestClass . WriteToMemory ( mem , 12345 )
print ( " Memory Value: " , TTestClass . ReadFromMemory ( mem ))
TTestClass . FreeMemory ( mem )
-- FFI example: Calling a native function directly
local ffi = require ( " ffi " )
ffi . cdef [[
int Add ( int a , int b );
]]
print ( " FFI Add: " , ffi . C . Add ( 10 , 20 ))
-- Loading an external DLL and accessing its functions
ffi . cdef [[
void MessageBoxA ( void * hwnd , const char * text , const char * caption , int type );
]]
local user32 = ffi . load ( " user32.dll " )
user32 . MessageBoxA ( nil , " Hello from LuaJIT! " , " FFI Example " , 0 )Ниже приведен пример, иллюстрирующий, как использовать Jetlua в приложении Delphi:
type
TTestRecord = record
ID: Integer;
Name : string;
Value : Double;
end ;
PTestRecord = ^TTestRecord;
{ $M+ }
TTestClass = class
published
class function Add (A, B: Integer): Integer;
class function Multiply (A, B: Double): Double;
class function Concat ( const A, B: string): string;
class function CreateList : TStringList;
class function GetListCount (List: TStringList): Integer;
class function CreateRecord (ID: Integer; const Name : string; Value : Double): TTestRecord;
class procedure UpdateRecord (P: PTestRecord; NewValue: Double);
class function GetRecordValue (P: PTestRecord): Double;
class function AllocateMemory (Size: Integer): Pointer;
class procedure FreeMemory (P: Pointer);
class procedure WriteToMemory (P: Pointer; Value : Integer);
class function ReadFromMemory (P: Pointer): Integer;
end ;
{ $M- }
var
LJetLua: TJetLua;
LRec: TTestRecord;
begin
LJetLua := TJetLua.Create();
try
try
LJetLua.RegisterRoutines(TTestClass);
LJetLua.LoadString(CScript);
WriteLn( ' Integer value: ' , LJetLua.Call( ' add ' , [ 50 , 50 ]).AsInteger);
WriteLn( ' String value: ' , LJetLua.Call( ' concat ' , [ ' Hello, ' , ' World! ' ]).AsString);
LRec.ID := 1 ;
LRec. Name := ' test ' ;
LRec. Value := 200 ;
LJetLua.Call( ' process_record ' , [@LRec, ' test ' ]);
except
on E: Exception do
begin
WriteLn(Format( ' Error: %s ' , [E.Message]));
end ;
end ;
finally
LJetLua.Free();
end ;
end ;Этот пример демонстрирует универсальность и совместимость? Delphi и Luajit:
Jetlua использует Luajit 2.1+, статически встроенный в приложение Delphi, чтобы обеспечить самостоятельное развертывание без внешних библиотечных зависимостей.
Процедуры Delphi, объявленные как опубликованные методы класса, автоматически зарегистрированы Jetlua, что устраняет необходимость в ручном привязке. Объявление методов, published гарантирует их доступность от сценариев Luajit.
Интерфейс посторонней функции Luajit (FFI) позволяет регистрации и вызов нативных процедур Delphi непосредственно из сценариев Lua. Ключевые преимущества включают:
Jetlua поддерживает фундаментальные типы данных как для параметров, так и для возвратных значений, включая:
stringfloat (одиночный или двойной)?Boolean ✅Pointer ➡При проектировании методов для совместимости Luajit убедитесь, что все параметры и возвратные значения соответствуют этим поддерживаемым типам.
Указатели, сгенерированные в Delphi, должны управляться исключительно Delphi. Важные соображения включают:
Программа испытаний дает демонстративный пример интеграции сценариев Luajit с приложением Delphi, охватывающей:
Jetlua предоставляет эффективное и надежное решение для интеграции сценариев Luajit в приложения Delphi. Он дает возможность разработчикам использовать динамическую гибкость Luajit, не ставя под угрозу внутреннюю сильную сторону Delphi в печати и производительности. Включая Jetlua, разработчики могут существенно увеличить потенциал расширяемости, обслуживания и настройки своих приложений Delphi.
Независимо от того, является ли ваша цель облегчить настройку времени выполнения или реализовать сложные конфигурации на основе скриптов, Jetlua предлагает для разработчиков Delphi мощные и доступные средства для достижения улучшенной интеграции сценариев?
Вклад в Jetlua активно рекомендуется. Пожалуйста, не стесняйтесь отправлять проблемы, предложить новые функции или создавать запросы на притяжение, чтобы расширить возможности и надежность сценариста.
Jetlua распределяется под? Лицензия BSD-3-CLAUSE , разрешающая перераспределение и использование как в исходных, так и в двоичных формах, с или без изменения, в определенных условиях. Смотрите файл лицензии для получения более подробной информации.
Для любого профессионального разработчика Delphi, заинтересованного в повышении гибкости приложений благодаря возможностям сценариев, Jetlua предлагает протестированное и надежное решение, которое сохраняет все автономное и производительное.

Сделано с ❤ в Delphi