M3RS4D 50062 (10-05-18), Speed Racer (10-05-18)
سلام
موتور لوا (در کلاس زیر ، نسخه 5.1) :
https://www.lua.org/ftp/lua-5.1.tar.gz
قابلیت ثبت کردن توابع (حتی متدهای سی شارپ) را در خودش داره .
کلاسی که در زیر پیوست میکنم ، حاوی توابع فراخونی کننده ی C Api در لوا هست :
Lua 5.1 Reference Manual - contents
چیزی که متوجه شدم اینه که تابعی که در لوا ثبت میشه ، فقط برای همون شی ای که ثبت اش کرد انگار در دسترس هه . برای بقیه ی اشیاء انگار در دسترس نیست . کد زیر را ببینین :
تابع LuaFunc برای ثبت در لوا ، نوشته شدکد:private void button3_Click(object sender, EventArgs e) { IntPtr luaState = LuaCSharp.lua_open(); LuaCSharp.lua_register(luaState, "LuaFunc", (LuaCSharp.LuaFunction)FormTest2.LuaFunc); int errCheck = LuaCSharp.luaL_dostring(luaState, "LuaFunc();"); MessageBox.Show(errCheck.ToString()); LuaCSharp.lua_close(luaState); ///////////////////////////////////// IntPtr luaState_2 = LuaCSharp.lua_open(); int errCheck_2 = LuaCSharp.luaL_dostring(luaState_2, "LuaFunc();"); MessageBox.Show(errCheck_2.ToString(), "luaState_2"); LuaCSharp.lua_close(luaState_2); } public static int LuaFunc(IntPtr luaState) { MessageBox.Show("Test"); return 0; }
اولین بار لوا را باز و در شی luaState ذخیره کردم . با همین شی ، تابع LuaFunc را در لوا ذخیره و بعدش با luaL_dostring اجرا کردم که تابع با موفقیت اجرا شد (بنابراین پیام دیالوگ مسیج رشته ی "Test" را داد)
اما بعد که یه شی دیگه از لوا ساختم و در luaState_2 ذخیره کردم (این بار دیگه تابع را ثبت نکردم چون در کد قبلی ثبت شده بود) ، دیگه تابع LuaFunc اجرا نشد و تابع luaL_dostring مقدار غیر از صفر (که به معنای ارور هست) را برگردوند
این نشون میده بصورت شی گرا و صرفا در همون لحظه اون تابع در لوا ثبت میشه و بصورت استاتیک ثبت نمیشه . اگه این طوری باشه (که فکر کنم یه راهی داشته باشه ولی اون راه را نمیدونم)، کارایی نداره در جاهای دیگه و در دسترس قرار نمیگیره .
کلا با چه روشی میشه تابع ثبت شده در لوا را توسط هر شی (خروجی متد lua_open) فراخونی کرد؟ یعنی تابع ثبت شده ، بصورت استاتیک در دسترس باشه و وابسته به شی خاصی نباشه؟
مگه روش ثبت یا روش فراخونی دیگه ای وجود داره؟
آخرین ویرایش توسط SajjadKhati در تاریخ 10-05-18 انجام شده است
دانلود فیلم آموزش برنامه نویسی Visual Studio C#.Net
فیلم آموزش کامل Autoplay Media Studio
وقتی انسان ، حیوان هست ، پس قیمت میتونی براش بذاری ولی وقتی انسان حَیّ مُتِاَلِّه هست که قیمت نداره ، بها داره. "دکتر حسن عباسی"
M3RS4D 50062 (10-05-18), Speed Racer (10-05-18)
1 کاربر در حال مشاهده این موضوع. (0 عضو و 1 میهمان)
Bookmarks