ปัญหา SEH ป้องกันไม่ให้ห้องสมุดนี้ทำงานอย่างถูกต้องกับ Delphi การพัฒนาเปลี่ยนเป็น https://github.com/tinybiggames/callisto ซึ่งไม่ได้รับผลกระทบจากปัญหาเหล่านี้และอื่น ๆ

Jetlua เป็นห้องสมุดการรวม Luajit ขั้นสูงที่สร้างขึ้นอย่างพิถีพิถันสำหรับนักพัฒนา Delphi ซึ่งเป็นอินเทอร์เฟซที่ราบรื่นระหว่างแอปพลิเคชัน Delphi และสคริปต์ Luajit โดยการรวมความแข็งแกร่งโดยธรรมชาติของ Delphi? ด้วยประสิทธิภาพรันไทม์ที่ยอดเยี่ยมของการรวบรวมเพียงเวลา (JIT) ของ Luajit Jetlua ได้รับการปรับให้เหมาะสมสำหรับนักพัฒนามืออาชีพที่มีจุดประสงค์เพื่อรวมความสามารถ⚡แบบไดนามิกเข้ากับซอฟต์แวร์ของพวกเขาโดยไม่ลดทอนประสิทธิภาพหรือเสถียรภาพ
Jetlua รวม LUAJIT เวอร์ชัน 2.1+ ซึ่งรวบรวมไว้ในแอปพลิเคชัน Delphi ของคุณไม่จำเป็นต้องใช้การพึ่งพา DLL ภายนอกหรือไม่ สิ่งนี้ช่วยเพิ่มความสามารถในการพกพาได้อย่างมาก? ของแอปพลิเคชันง่ายขึ้นการกระจายและอำนวยความสะดวกในการรวมตัวกันของความสามารถในการเขียนสคริปต์ภายในสภาพแวดล้อม Delphi
การใช้ Jetlua นักพัฒนาสามารถเปิดเผยวิธีการคลาส Delphi ไปยังสคริปต์ Lua ได้ ห้องสมุดใช้ประโยชน์จาก RTTI ของ Delphi (ข้อมูลประเภทรันไทม์)? เพื่ออำนวยความสะดวกในการลงทะเบียนวิธีการที่มีประสิทธิภาพและการรวมเข้ากับ Luajit ในลักษณะที่คล่องตัว
นอกจากนี้ 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 โดยเฉพาะ ข้อควรพิจารณาที่สำคัญ ได้แก่ :
โปรแกรม testbed เป็นตัวอย่างที่แสดงให้เห็นถึงการรวมสคริปต์ luajit เข้ากับแอปพลิเคชัน Delphi ซึ่งครอบคลุม:
Jetlua เป็นโซลูชั่นที่มีประสิทธิภาพและมีประสิทธิภาพสำหรับการรวมการเขียนสคริปต์ Luajit เข้ากับแอปพลิเคชัน Delphi มันช่วยให้นักพัฒนาสามารถใช้ประโยชน์จากความยืดหยุ่นแบบไดนามิกของ Luajit โดยไม่ลดทอนความแข็งแกร่งที่แท้จริงของ Delphi ในการพิมพ์และประสิทธิภาพ โดยการรวม Jetlua นักพัฒนาสามารถเพิ่มความสามารถในการขยายการบำรุงรักษาและการปรับแต่งศักยภาพของแอปพลิเคชัน Delphi ของพวกเขา
ไม่ว่าจะเป็นวัตถุประสงค์ของคุณเพื่ออำนวยความสะดวกในการปรับแต่งรันไทม์หรือใช้การกำหนดค่าสคริปต์ที่ซับซ้อน Jetlua นำเสนอวิธีการที่ทรงพลังและเข้าถึงได้สำหรับนักพัฒนา Delphi
การมีส่วนร่วมใน Jetlua ได้รับการสนับสนุนอย่างสูง โปรดอย่าลังเลที่จะส่งปัญหาแนะนำคุณสมบัติใหม่หรือสร้างคำขอดึงเพื่อขยายความสามารถและความแข็งแกร่งของเอ็นจิ้นสคริปต์
Jetlua แจกจ่ายภายใต้? ใบอนุญาต BSD-3-clause ช่วยให้สามารถแจกจ่ายและใช้งานได้ทั้งในรูปแบบแหล่งที่มาและแบบไบนารีโดยมีหรือไม่มีการดัดแปลงภายใต้เงื่อนไขเฉพาะ ดูไฟล์ใบอนุญาตสำหรับรายละเอียดเพิ่มเติม
สำหรับนักพัฒนา Delphi มืออาชีพที่สนใจเพิ่มความยืดหยุ่นของแอปพลิเคชันด้วยความสามารถในการเขียนสคริปต์ Jetlua เสนอโซลูชันที่ผ่านการทดสอบและเชื่อถือได้ซึ่งช่วยให้ทุกอย่างมีอยู่ในตัวเองและมีประสิทธิภาพ

ทำด้วย❤ใน Delphi