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

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

  1. #1
    کاربر دائمی آواتار SajjadKhati
    تاریخ عضویت
    تیر 1394
    پست
    138
    تشکر کردن
    112
    94 بار تشکر شده در 59 پست

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

    سلام
    موتور لوا (در کلاس زیر ، نسخه 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, 15:19 عصر
  2. حذف گزینه های انتخاب شده در لیست باکس سی شارپ
    نوشته شده توسط Mori Bone در بخش C#‎‎
    پاسخ: 0
    آخرین پست: پنج شنبه 26 دی 1392, 18:56 عصر
  3. آموزش: بدست آوردن برنامه های نصب شده در ویندوز توسط سی شارپ
    نوشته شده توسط ایمان مدائنی در بخش C#‎‎
    پاسخ: 0
    آخرین پست: دوشنبه 25 شهریور 1392, 12:37 عصر
  4. فراخوانی توابع نوشته شده در فایلcs در کدنویسی jquery
    نوشته شده توسط moona9090 در بخش JavaScript و Framework های مبتنی بر آن
    پاسخ: 6
    آخرین پست: یک شنبه 01 بهمن 1391, 00:15 صبح
  5. سوال: توابع نوشته شده در کتابخانه های سی
    نوشته شده توسط reza273 در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 1
    آخرین پست: سه شنبه 15 اردیبهشت 1388, 16:59 عصر

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

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