Les problèmes de SEH empêchent cette bibliothèque de travailler correctement avec Delphi. Le développement se déplace vers https://github.com/tinybiggames/callisto, qui ne souffre pas de ces problèmes et d'autres.

Jetlua est une bibliothèque d'intégration Luajit avancée méticuleusement conçue pour les développeurs Delphi, fournissant une interface transparente entre les applications Delphi et les scripts Luajit. En fusionnant la robustesse inhérente de Delphi? Avec l'efficacité d'exécution exceptionnelle de la compilation juste en temps (JIT) de Luajit, Jetlua est optimisée pour les développeurs professionnels visant à incorporer des capacités dynamiques dans leur logiciel sans compromettre les performances ou la stabilité.
Jetlua intègre Luajit version 2.1+, compilé statiquement dans votre application Delphi, éliminant le besoin de dépendances DLL externes ?. Cela améliore considérablement la portabilité? de l'application, simplifie la distribution et facilite l'incorporation des capacités de script dans les environnements Delphi.
En utilisant Jetlua, les développeurs peuvent exposer les méthodes de classes Delphi aux scripts LUA, dominant ainsi leurs applications avec une extensibilité dynamique ?. La bibliothèque exploite le RTTI de Delphi (informations de type d'exécution)? pour faciliter l'enregistrement et l'intégration efficaces des méthodes avec Luajit de manière rationalisée.
De plus, Jetlua exploite la puissante interface de fonction étrangère (FFI)? Offert par Luajit, permettant aux routines Delphi / DLL exportées d'être directement enregistrées et utilisées dans les scripts LUA. Tirer parti du FFI élimine la nécessité de liaisons intermédiaires complexes, facilitant une intégration plus rapide et plus efficace entre Delphi et Luajit.
dbg() dans le code Luajit lance une session de débogage interactive, essentielle pour l'identification des problèmes d'exécution.import personnalisées permettent de combiner des scripts, compilées en une seule unité et éventuellement intégrées en tant que ressource EXE, résultant en une application entièrement autonome. Pour commencer à utiliser Jetlua, suivez ces étapes:
Le programme Testbed fournit un exemple complet des capacités de Jetlua, démontrant l'intégration des scripts Luajit avec une application Delphi. Les fonctionnalités clés illustrées incluent les opérations arithmétiques ➕, la manipulation de cordes ✂️, la manipulation des enregistrements, la gestion de la mémoire?
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 )Vous trouverez ci-dessous un exemple illustrant comment utiliser Jetlua dans une application 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 ;Cet exemple démontre la polyvalence et l'interopérabilité? de Delphi et Luajit:
Jetlua utilise Luajit 2.1+, intégrée statiquement dans l'application Delphi pour assurer un déploiement autonome sans dépendances de bibliothèque externes.
Les routines Delphi déclarées comme les méthodes de classe publiées sont automatiquement enregistrées par Jetlua, éliminant le besoin de liaison manuelle. La déclaration des méthodes telles que published garantit leur accessibilité des scripts Luajit.
L'interface de fonction étrangère de Luajit (FFI) permet l'enregistrement et l'invocation des routines de Delphi natives directement à partir des scripts LUA. Les avantages clés comprennent:
Jetlua prend en charge les types de données fondamentaux pour les paramètres et les valeurs de retour, notamment:
stringfloat (simple ou double)?Boolean ✅Pointer ➡️Lors de la conception de méthodes pour l'interopérabilité de Luajit, assurez-vous que tous les paramètres et valeurs de retour sont conformes à ces types pris en charge.
Les pointeurs générés dans Delphi doivent être gérés exclusivement par Delphi. Les considérations importantes comprennent:
Le programme de balises d'essai fournit un exemple démonstratif d'intégration de la script Luajit avec une application Delphi, englobant:
Jetlua fournit une solution efficace et robuste pour intégrer le script Luajit dans les applications Delphi. Il permet aux développeurs de tirer parti de la flexibilité dynamique de Luajit sans compromettre les forces intrinsèques de Delphi dans la dactylographie et les performances. En incorporant Jetlua, les développeurs peuvent augmenter considérablement l'extensibilité, la maintenabilité et le potentiel de personnalisation de leurs applications Delphi.
Que votre objectif soit de faciliter la personnalisation d'exécution ou d'implémenter des configurations complexes basées sur des scripts, Jetlua offre un moyen puissant et accessible pour les développeurs de Delphi d'obtenir une intégration de script améliorée ?.
Les contributions à Jetlua sont fortement encouragées. N'hésitez pas à soumettre des problèmes, à suggérer de nouvelles fonctionnalités ou à créer des demandes de traction pour étendre les capacités et la robustesse du moteur de script.
Jetlua est distribué sous le? Licence de clause BSD-3 , permettant la redistribution et l'utilisation sous des formulaires source et binaire, avec ou sans modification, dans des conditions spécifiques. Voir le fichier de licence pour plus de détails.
Pour tout développeur de Delphi professionnel intéressé à améliorer la flexibilité des applications avec les capacités de script, Jetlua propose une solution testée et fiable qui maintient tout autonome et performant.

Fait avec ❤️ à Delphi