SEHの問題は、このライブラリがDelphiで適切に動作することを防ぎます。開発はhttps://github.com/tinybiggames/callistoに移行します。

Jetluaは、Delphiの開発者向けに細心の注意を払って作成された高度なLuajit Integration Libraryであり、DelphiアプリケーションとLuajitスクリプトの間にシームレスなインターフェイスを提供しています。 Delphiの固有の堅牢性を融合させることによって? LuajitのJust-in-time(JIT)コンピレーションの例外的なランタイム効率により、Jetluaは、パフォーマンスや安定性を損なうことなく、ダイナミクスの機能をソフトウェアに組み込むことを目的としたプロの開発者向けに最適化されています。
Jetluaは、Luajitバージョン2.1+を統合し、Delphiアプリケーションに静的にコンパイルされ、外部DLL依存関係の必要性を排除します。これにより、携帯性が大幅に向上しますか?アプリケーションの分布を簡素化し、Delphi環境にスクリプト機能の組み込みを促進します。
Jetluaを使用して、開発者はDelphiクラスのメソッドをLUAスクリプトに公開し、それによりアプリケーションを動的拡張性で吸い込むことができますか?ライブラリは、DelphiのRTTI(実行時タイプ情報)を活用していますか?合理化された方法でLuajitとの効率的なメソッドの登録と統合を促進する。
さらに、Jetluaは強力な外国機能インターフェイス(FFI)を活用していますか? Luajitが提供し、エクスポートされたDelphi/DLLルーチンをLUAスクリプト内で直接登録および利用できるようにします。 FFIを活用すると、複雑な中間のバインディングの必要性がなくなり、DelphiとLuajitの間のより速く、より効果的な統合が促進されます。
dbg()の挿入は、ランタイム発行の識別に不可欠なインタラクティブなデバッグセッションを開始します。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 )以下は、DelphiアプリケーションでJetluaを利用する方法を示す例です。
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)を使用すると、LUAスクリプトから直接ネイティブDelphiルーチンの登録と呼び出しを許可します。重要な利点は次のとおりです。
Jetluaは、次のようなパラメーターと返品値の両方の基本データ型をサポートしています。
stringfloat (シングルまたはダブル)?Boolean ✅Pointer ➡️Luajit相互運用性の方法を設計するときは、すべてのパラメーターと戻り値がこれらのサポートされているタイプに準拠していることを確認してください。
Delphi内で生成されたポインターは、Delphiが独占的に管理する必要があります。重要な考慮事項は次のとおりです。
テストベッドプログラムは、LuajitスクリプトとDelphiアプリケーションを統合する実証的な例を提供し、次のことを網羅しています。
Jetluaは、Luajit ScriptingをDelphiアプリケーションに統合するための効率的で堅牢なソリューションを提供します。開発者は、タイピングとパフォーマンスにおけるDelphiの本質的な強みに妥協することなく、Luajitの動的な柔軟性を活用することを可能にします。 Jetluaを組み込むことにより、開発者はDelphiアプリケーションの拡張性、保守性、およびカスタマイズの可能性を大幅に増強できます。
あなたの目的がランタイムのカスタマイズを促進するか、複雑なスクリプトベースの構成を実装することであるかどうかにかかわらず、JetluaはDelphi開発者が強力なスクリプト統合を実現するための強力でアクセスしやすい手段を提供します。
Jetluaへの貢献は非常に奨励されています。お気軽に問題を提出したり、新機能を提案したり、スクリプトエンジンの機能と堅牢性を拡張するためのプルリクエストを作成してください。
Jetluaは? BSD-3-Clauseライセンス。特定の条件下で、変更の有無にかかわらず、ソースフォームとバイナリ形式の両方での再分配と使用を可能にします。詳細については、ライセンスファイルを参照してください。
スクリプト機能を使用してアプリケーションの柔軟性を高めることに関心のあるプロのDelphi開発者に、Jetluaは、すべてを自己完結型でパフォーマンスを維持するテスト済みの信頼できるソリューションを提供します。

Delphiで❤️で作られています