نمایش نتایج 1 تا 1 از 1

نام تاپیک: فراخوانی توابع ثبت شده در لوا درون سی شارپ

  1. #1

    فراخوانی توابع ثبت شده در لوا درون سی شارپ

    سلام
    موتور لوا (در کلاس زیر ، نسخه 5.1) :

    https://www.lua.org/ftp/lua-5.1.tar.gz

    قابلیت ثبت کردن توابع (حتی متدهای سی شارپ) را در خودش داره .
    کلاسی که در زیر پیوست میکنم ، حاوی توابع فراخونی کننده ی C Api در لوا هست :

    http://www.lua.org/manual/5.1/

    چیزی که متوجه شدم اینه که تابعی که در لوا ثبت میشه ، فقط برای همون شی ای که ثبت اش کرد انگار در دسترس هه . برای بقیه ی اشیاء انگار در دسترس نیست . کد زیر را ببینین :


    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;
    }

    تابع LuaFunc برای ثبت در لوا ، نوشته شد
    اولین بار لوا را باز و در شی luaState ذخیره کردم . با همین شی ، تابع LuaFunc را در لوا ذخیره و بعدش با luaL_dostring اجرا کردم که تابع با موفقیت اجرا شد (بنابراین پیام دیالوگ مسیج رشته ی "Test" را داد)
    اما بعد که یه شی دیگه از لوا ساختم و در luaState_2 ذخیره کردم (این بار دیگه تابع را ثبت نکردم چون در کد قبلی ثبت شده بود) ، دیگه تابع LuaFunc اجرا نشد و تابع luaL_dostring مقدار غیر از صفر (که به معنای ارور هست) را برگردوند
    این نشون میده بصورت شی گرا و صرفا در همون لحظه اون تابع در لوا ثبت میشه و بصورت استاتیک ثبت نمیشه . اگه این طوری باشه (که فکر کنم یه راهی داشته باشه ولی اون راه را نمیدونم)، کارایی نداره در جاهای دیگه و در دسترس قرار نمیگیره .

    کلا با چه روشی میشه تابع ثبت شده در لوا را توسط هر شی (خروجی متد lua_open) فراخونی کرد؟ یعنی تابع ثبت شده ، بصورت استاتیک در دسترس باشه و وابسته به شی خاصی نباشه؟

    مگه روش ثبت یا روش فراخونی دیگه ای وجود داره؟
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله SajjadKhati : پنج شنبه 20 اردیبهشت 1397 در 12:07 عصر

تاپیک های مشابه

  1. حرفه ای: نحوه گرفتن عنوان های سرچ شده در گوگل با سی شارپ
    نوشته شده توسط soheilnew در بخش C#‎‎
    پاسخ: 0
    آخرین پست: یک شنبه 30 آبان 1395, 14:19 عصر
  2. حذف گزینه های انتخاب شده در لیست باکس سی شارپ
    نوشته شده توسط Mori Bone در بخش C#‎‎
    پاسخ: 0
    آخرین پست: پنج شنبه 26 دی 1392, 17:56 عصر
  3. آموزش: بدست آوردن برنامه های نصب شده در ویندوز توسط سی شارپ
    نوشته شده توسط ایمان مدائنی در بخش C#‎‎
    پاسخ: 0
    آخرین پست: دوشنبه 25 شهریور 1392, 12:37 عصر
  4. فراخوانی توابع نوشته شده در فایلcs در کدنویسی jquery
    نوشته شده توسط moona9090 در بخش JavaScript و Framework های مبتنی بر آن
    پاسخ: 6
    آخرین پست: شنبه 30 دی 1391, 23:15 عصر
  5. سوال: توابع نوشته شده در کتابخانه های سی
    نوشته شده توسط reza273 در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 1
    آخرین پست: سه شنبه 15 اردیبهشت 1388, 16:59 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •