تمنع مشكلات SEH هذه المكتبة من العمل بشكل صحيح مع Delphi. ينتقل التطوير إلى https://github.com/tinybiggames/callisto ، الذي لا يعاني من هذه القضايا وغيرها.

Jetlua هي مكتبة تكامل Luajit المتقدمة المصنوعة بدقة لمطوري Delphi ، وتوفر واجهة سلسة بين تطبيقات Delphi و Luajit البرامج النصية. من خلال دمج متانة دلفي المتأصلة؟ من خلال كفاءة وقت التشغيل الاستثنائية لمجموعة Luajit Just-In (JIT) ، تم تحسين Jetlua للمطورين المحترفين الذين يهدفون إلى دمج القدرات الديناميكية في برامجهم دون المساس بالأداء أو الاستقرار.
يدمج Jetlua Luajit الإصدار 2.1+ ، تم تجميعه بشكل ثابت في تطبيق Delphi الخاص بك ، مما يلغي الحاجة إلى تبعيات DLL الخارجية؟ هذا يعزز إلى حد كبير قابلية النقل؟ من التطبيق ، يبسط التوزيع ، ويسهل دمج قدرات البرمجة النصية داخل بيئات دلفي.
باستخدام jetlua ، يمكن للمطورين فضح أساليب دروس دلفي لنصوص LUA ، وبالتالي تمنع تطبيقاتهم بامتداد ديناميكي؟ تعمل المكتبة على الاستفادة من معلومات Delphi's RTTI (نوع تشغيل وقت التشغيل)؟ لتسهيل تسجيل الطريقة الفعالة والتكامل مع Luajit بطريقة مبسطة.
علاوة على ذلك ، تسخير Jetlua واجهة الوظيفة الخارجية القوية (FFI)؟ تقدمه Luajit ، مما يسمح بتسجيل روتينات Delphi/DLL المصدرة مباشرة واستخدامها في البرامج النصية LUA. الاستفادة من FFI يلغي ضرورة ارتباطات وسيطة معقدة ، مما يسهل التكامل بشكل أسرع وأكثر فعالية بين دلفي ولويجيت.
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 ;هذا المثال يوضح التنوع والتشغيل البيني؟ من دلفي ولويجيت:
يستخدم Jetlua Luajit 2.1+ ، المضمّن بشكل ثابت في تطبيق Delphi لضمان نشر مستقر بذاته دون تبعيات مكتبة خارجية.
يتم تسجيل روتينات Delphi التي تم الإعلان عنها كطرق فئة منشورة تلقائيًا بواسطة Jetlua ، مما يلغي الحاجة إلى الربط اليدوي. إن إعلان published كما يضمن إمكانية وصولهم من البرامج النصية Luajit.
تتيح واجهة الوظيفة الخارجية لـ Luajit (FFI) تسجيل واستدعاء إجراءات Delphi الأصلية مباشرة من البرامج النصية LUA. تشمل المزايا الرئيسية:
يدعم Jetlua أنواع البيانات الأساسية لكل من المعلمات وقيم الإرجاع ، بما في ذلك:
stringfloat (واحد أم مزدوج)؟Boolean ✅Pointer ➡عند تصميم أساليب قابلية التشغيل المتداخل Luajit ، تأكد من أن جميع المعلمات وقيم الإرجاع تتوافق مع هذه الأنواع المدعومة.
يجب أن تتم إدارة المؤشرات التي تم إنشاؤها داخل دلفي بشكل حصري بواسطة Delphi. تشمل الاعتبارات المهمة:
يوفر برنامج Testbed مثالًا توضيحيًا على دمج البرمجة النصية Luajit مع تطبيق Delphi ، يشمل:
يوفر Jetlua حلاً فعالًا وقويًا لدمج البرمجة النصية Luajit في تطبيقات Delphi. إنه يمكّن المطورين من الاستفادة من المرونة الديناميكية لـ Luajit دون المساومة على نقاط القوة الجوهرية لـ Delphi في الكتابة والأداء. من خلال دمج jetlua ، يمكن للمطورين زيادة إلى حد كبير من قابلية التوسع ، وقابلية الصيانة ، وإمكانات التخصيص لتطبيقات Delphi الخاصة بهم.
سواء كان هدفك هو تسهيل تخصيص وقت التشغيل أو تنفيذ التكوينات المعقدة القائمة على البرنامج النصي ، فإن Jetlua يوفر وسيلة قوية ويمكن الوصول إليها لمطوري Delphi لتحقيق تكامل نصوص محسّن؟
يتم تشجيع المساهمات في Jetlua للغاية. لا تتردد في تقديم المشكلات ، أو اقتراح ميزات جديدة ، أو إنشاء طلبات سحب لتوسيع إمكانيات وقوة محرك البرمجة النصية.
يتم توزيع Jetlua تحت؟ ترخيص BSD-3-CASE ، مما يسمح بإعادة التوزيع والاستخدام في كل من النماذج المصدر والثنائية ، مع أو بدون تعديل ، في ظل ظروف محددة. انظر ملف الترخيص لمزيد من التفاصيل.
بالنسبة لأي مطور Delphi المحترف المهتم بتعزيز مرونة التطبيق مع إمكانات البرمجة النصية ، تقدم Jetlua حلاً تم اختباره وموثوقًا به يحافظ على كل شيء مكتفيًا وأداء ذاتيًا.

مصنوع من ❤ في دلفي