Los problemas de SEH evitan que esta biblioteca funcione correctamente con Delphi. El desarrollo cambia a https://github.com/tinybiggames/callisto, que no sufre de estos y otros problemas.

Jetlua es una biblioteca de integración de Luajit avanzada meticulosamente diseñada para desarrolladores de Delphi, que proporciona una interfaz perfecta entre las aplicaciones Delphi y los scripts de Luajit. Fusionando la robustez inherente de Delphi? Con la excepcional eficiencia de tiempo de ejecución de la compilación justo a tiempo de Luajit (JIT), JetluA está optimizado para los desarrolladores profesionales con el objetivo de incorporar capacidades dinámicas ⚡ en su software sin comprometer el rendimiento o la estabilidad.
Jetlua integra la versión 2.1+ de Luajit, compilada estáticamente en su aplicación Delphi, ¿eliminando la necesidad de dependencias externas de DLL? ¿Esto mejora enormemente la portabilidad? de la aplicación, simplifica la distribución y facilita la incorporación de capacidades de secuencias de comandos dentro de los entornos de Delphi.
Utilizando JetluA, los desarrolladores pueden exponer los métodos de clases de Delphi a los scripts de Lua, dando así a sus aplicaciones con extensibilidad dinámica? ¿La biblioteca aprovecha el RTTI de Delphi (información de tipo de ejecución)? Para facilitar el registro e integración de métodos eficientes con Luajit de manera simplificada.
Además, ¿Jetlua aprovecha la poderosa interfaz de función extranjera (FFI)? ofrecido por Luajit, lo que permite que las rutinas Delphi/DLL exportadas se registren directamente y se utilizarán dentro de los scripts de Lua. Aprovechar FFI elimina la necesidad de uniones intermedias complejas, facilitando la integración más rápida y efectiva entre Delphi y Luajit.
dbg() dentro del código LUajit inicia una sesión de depuración interactiva, esencial para la identificación de problemas de tiempo de ejecución.import personalizados permiten que los scripts se combinen, compilen en una sola unidad y opcionalmente incrustado como un recurso EXE, lo que resulta en una aplicación totalmente autónoma. Para comenzar a utilizar Jetlua, siga estos pasos:
El programa Testbed proporciona un ejemplo completo de las capacidades de Jetlua, lo que demuestra la integración de los secuencias de comandos de Luajit con una aplicación Delphi. Las funcionalidades clave ilustradas incluyen operaciones aritméticas ➕, manipulación de cadenas ✂️, manejo de registros, gestión de memoria y manejo de errores sofisticados
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 )A continuación se muestra un ejemplo que ilustra cómo utilizar JetluA dentro de una aplicación 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 ;¿Este ejemplo demuestra la versatilidad y la interoperabilidad? de Delphi y Luajit:
Jetlua usa Luajit 2.1+, está integrado estáticamente en la aplicación Delphi para garantizar una implementación autónoma sin dependencias de biblioteca externas.
Las rutinas de Delphi declaradas como métodos de clase publicados están registradas automáticamente por JetluA, eliminando la necesidad de unión manual. Declaración de métodos published garantiza su accesibilidad de los scripts de Luajit.
La interfaz de función extranjera de Luajit (FFI) permite el registro e invocación de rutinas Delphi nativas directamente desde los scripts Lua. Las ventajas clave incluyen:
JETLUA admite tipos de datos fundamentales para los parámetros y valores de retorno, que incluyen:
stringfloat (simple o doble)?Boolean ✅Pointer ➡️Al diseñar métodos para la interoperabilidad de Luajit, asegúrese de que todos los parámetros y los valores de retorno se ajusten a estos tipos compatibles.
Los punteros generados dentro de Delphi deben ser administrados exclusivamente por Delphi. Consideraciones importantes incluyen:
El programa Testbed proporciona un ejemplo demostrativo de integrar las secuencias de comandos de Luajit con una aplicación Delphi, que abarca:
JETLUA proporciona una solución eficiente y robusta para integrar las secuencias de comandos de Luajit en aplicaciones Delphi. Empodera a los desarrolladores para aprovechar la flexibilidad dinámica de Luajit sin comprometer las fortalezas intrínsecas de Delphi en la escritura y el rendimiento. Al incorporar JETLUA, los desarrolladores pueden aumentar sustancialmente la extensibilidad, la mantenibilidad y el potencial de personalización de sus aplicaciones Delphi.
Ya sea que su objetivo sea facilitar la personalización del tiempo de ejecución o implementar configuraciones complejas basadas en script, JetluA ofrece un medio poderoso y accesible para que los desarrolladores de Delphi logren una integración mejorada de secuencias de comandos?
Las contribuciones a Jetlua son muy alentadas. No dude en enviar problemas, sugerir nuevas funciones o crear solicitudes de extracción para expandir las capacidades y la robustez del motor de secuencias de comandos.
Jetlua se distribuye bajo el? Licencia de cláusula BSD-3 , que permite redistribución y uso en formularios de origen y binaria, con o sin modificación, en condiciones específicas. Consulte el archivo de licencia para obtener más detalles.
Para cualquier desarrollador profesional de Delphi interesado en mejorar la flexibilidad de la aplicación con capacidades de secuencias de comandos, JetluA ofrece una solución probada y confiable que mantiene todo autónomo y rendimiento.

Hecho con ❤️ en Delphi