加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

lua userdata

发布时间:2020-12-14 22:09:40 所属栏目:大数据 来源:网络整理
导读:想把C的结构 [cpp] view plaincopyprint? struct Player { WORD wChairID; int iHeroID; int iChosenHeros[16]; }; 如上 传给lua [cpp] view plaincopyprint? #include "stdio.h" extern "C" { #include "lua/lua.h" #include "lua/lualib.h" #include "lua/

想把C的结构

[cpp] view plaincopyprint?
  1. struct Player
  2. {
  3. WORD wChairID;int iHeroID; int iChosenHeros[16];
  4. };

如上 传给lua

[cpp] view plaincopyprint?
  1. #include "stdio.h"
  2. extern "C"
  3. {
  4. #include "lua/lua.h"
  5. #include "lua/lualib.h"
  6. #include "lua/lauxlib.h"
  7. };
  8. typedef struct
  9. {
  10. int wChairID;
  11. int iHeroID;
  12. int iChosenHeros[16];
  13. }
  14. Player;
  15. /* LUA接口声明*/
  16. lua_State* L;
  17. void Operate(Player &obj)
  18. {
  19. int i;
  20. lua_getglobal(L, "PlayOperate");
  21. lua_newtable(L);
  22. lua_pushstring(L,"wChairID");
  23. lua_pushnumber(L,obj.wChairID);
  24. lua_settable(L,-3);
  25. lua_pushstring(L, "iHeroID");
  26. lua_pushnumber(L,obj.iHeroID);
  27. lua_settable(L,-3);
  28. lua_pushstring(L, "iChosenHeros");
  29. lua_newtable(L);
  30. for (i=0;i<16;++i)
  31. {
  32. lua_pushnumber(L,i);
  33. lua_pushnumber(L,obj.iChosenHeros[i]);
  34. lua_settable(L,-3);
  35. }
  36. lua_settable(L,-3);
  37. lua_call(L,1,1);
  38. lua_pushstring(L, "wChairID");
  39. int n=lua_gettop(L);
  40. lua_gettable(L,-2);
  41. obj.wChairID = (int)lua_tonumber(L,-1);
  42. lua_pop(L,1);
  43. lua_pushstring(L,"iHeroID");
  44. lua_gettable(L,-2);
  45. obj.iHeroID = (int)lua_tonumber(L,"iChosenHeros");
  46. lua_gettable(L,-2);
  47. for (i=0;i<16;++i)
  48. {
  49. lua_pushnumber(L,i);
  50. lua_gettable(L,-2);
  51. obj.iChosenHeros[i]=(int)lua_tonumber(L,1);
  52. }
  53. }
  54. int main(int argc,char *argv[])
  55. {
  56. int i;
  57. Player obj;
  58. obj.wChairID = 1;
  59. obj.iHeroID = 2;
  60. for(i=0; i<16; ++i)
  61. obj.iChosenHeros[i]=3;
  62. //print initial value
  63. printf( "The origin is blow:n");
  64. printf( "obj.wChairID = %dn",obj.wChairID);
  65. printf( "obj.iHeroID = %dn",obj.iHeroID);
  66. for(i=0; i<16; ++i)
  67. printf( "obj.iChosenHeros[%d] = %dn",i,obj.iChosenHeros[i]);
  68. /* initialize Lua */
  69. L = lua_open();
  70. if (NULL == L)
  71. {
  72. return -1;
  73. }
  74. /* load Lua base libraries */
  75. luaL_openlibs(L);
  76. /* load the script */
  77. luaL_dofile(L, "e:aaa.lua"); //这里指定aaa.lua文件的位置
  78. /* call function */
  79. Operate(obj);
  80. /* print the result */
  81. printf( "The result is blow:n");
  82. printf( "obj.wChairID = %dn",obj.wChairID);
  83. printf( "obj.iHeroID = %dn",obj.iHeroID);
  84. for(i=0; i<16; ++i)
  85. printf( "obj.iChosenHeros[%d] = %dn",obj.iChosenHeros[i]);
  86. /* cleanup Lua */
  87. lua_close(L);
  88. return 0;
  89. }

=============aaa.lua==========

[plain] view plaincopyprint?
  1. function PlayOperate(x)
  2. x.wChairID = x.wChairID+1
  3. x.iHeroID = x.iHeroID+1
  4. x.iChosenHeros[0]= 9
  5. x.iChosenHeros[1]= 10
  6. return x
  7. end ?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读