Os problemas do SEH impedem que essa biblioteca funcione corretamente com a Delphi. O desenvolvimento muda para https://github.com/tinybiggames/callisto, que não sofre desses e outros problemas.

A Jetlua é uma biblioteca de integração Luajit avançada meticulosamente criada para desenvolvedores da Delphi, fornecendo uma interface perfeita entre aplicativos Delphi e scripts Luajit. Ao mesclar a robustez inerente de Delphi? Com a excepcional eficiência de tempo de execução da compilação just-in-time (JIT) da Luajit, o Jetlua é otimizado para desenvolvedores profissionais que visam incorporar recursos dinâmicos ⚡ em seu software sem comprometer o desempenho ou a estabilidade.
O Jetlua integra o Luajit versão 2.1+, compilado estaticamente no seu aplicativo Delphi, eliminando a necessidade de dependências de DLL externas?. Isso aumenta muito a portabilidade? do aplicativo, simplifica a distribuição e facilita a incorporação de recursos de script nos ambientes Delphi.
Usando o Jetlua, os desenvolvedores podem expor os métodos das classes da Delphi a scripts da LUA, dando assim suas aplicações com extensibilidade dinâmica? A biblioteca aproveita o RTTI da Delphi (informação do tipo de tempo de execução)? Facilitar o registro e a integração do método eficiente com o Luajit de maneira simplificada.
Além disso, Jetlua aproveita a poderosa interface de função estrangeira (FFI)? Oferecido pela Luajit, permitindo que as rotinas exportadas Delphi/DLL sejam registradas diretamente e utilizadas nos scripts da Lua. A alavancagem da FFI elimina a necessidade de ligações intermediárias complexas, facilitando a integração mais rápida e eficaz entre Delphi e Luajit.
dbg()import personalizados permitem que os scripts sejam combinados, compilados em uma única unidade e opcionalmente incorporados como um recurso exe, resultando em um aplicativo totalmente independente. Para começar a utilizar o Jetlua, siga estas etapas:
O programa Testbed fornece um exemplo abrangente dos recursos da Jetlua, demonstrando a integração do Script de Luajit com um aplicativo Delphi. As principais funcionalidades ilustradas incluem operações aritméticas ➕, manipulação de string ✂️, manuseio de registros, gerenciamento de memória? E manuseio sofisticado de erro
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 )Abaixo está um exemplo que ilustra como utilizar o Jetlua em um aplicativo 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 exemplo demonstra a versatilidade e a interoperabilidade? de Delphi e Luajit:
O Jetlua usa o Luajit 2.1+, estaticamente incorporado ao aplicativo Delphi para garantir uma implantação independente sem dependências externas da biblioteca.
As rotinas Delphi declaradas como métodos de classe publicadas são registradas automaticamente pelo Jetlua, eliminando a necessidade de ligação manual. A declaração de métodos como published garante sua acessibilidade dos scripts Luajit.
A interface de função estrangeira (FFI) de Luajit permite o registro e a invocação de rotinas nativas de Delphi diretamente dos scripts Lua. As principais vantagens incluem:
O Jetlua suporta tipos de dados fundamentais para parâmetros e valores de retorno, incluindo:
stringfloat (único ou duplo)?Boolean ✅Pointer ➡️Ao projetar métodos para a interoperabilidade Luajit, verifique todos os parâmetros e os valores de retorno estão em conformidade a esses tipos suportados.
Os ponteiros gerados no Delphi devem ser gerenciados exclusivamente por Delphi. Considerações importantes incluem:
O programa de teste fornece um exemplo demonstrativo de integrar scripts de luajit com um aplicativo Delphi, abrangendo:
A Jetlua fornece uma solução eficiente e robusta para integrar scripts Luajit em aplicativos Delphi. Ele capacita os desenvolvedores a alavancar a flexibilidade dinâmica de Luajit sem comprometer os pontos fortes intrínsecos de Delphi na digitação e no desempenho. Ao incorporar a Jetlua, os desenvolvedores podem aumentar substancialmente a extensibilidade, a manutenção e o potencial de personalização de seus aplicativos Delphi.
Se seu objetivo é facilitar a personalização do tempo de execução ou implementar configurações complexas baseadas em scripts, o Jetlua oferece meios poderosos e acessíveis para os desenvolvedores da Delphi alcançarem uma integração aprimorada de scripts?.
As contribuições para a Jetlua são altamente encorajadas. Sinta -se à vontade para enviar problemas, sugerir novos recursos ou criar solicitações de puxar para expandir os recursos e a robustez do mecanismo de script.
Jetlua é distribuído sob o? Licença de cláusula BSD-3 , permitindo redistribuição e uso em formulários de origem e binária, com ou sem modificação, sob condições específicas. Consulte o arquivo de licença para obter mais detalhes.
Para qualquer desenvolvedor profissional de Delphi interessado em aprimorar a flexibilidade dos aplicativos com os recursos de script, a Jetlua oferece uma solução testada e confiável que mantém tudo independente e performante.

Feito com ❤️ em Delphi