zoukankan      html  css  js  c++  java
  • Lua C++互传结构体实例

    转自:http://bbs.csdn.net/topics/350261649

    =====main.cpp=======
    #include "stdio.h"
    
    extern "C"
    {
    #include "lua/lua.h"
    #include "lua/lualib.h"
    #include "lua/lauxlib.h"
    };
    
    typedef struct 
    {
    int  wChairID;
    int  iHeroID;
    int  iChosenHeros[16];
    }
    Player;
    
    /* LUA接口声明*/
    lua_State* L;
    
    void Operate(Player &obj)
    {
        int i;
    
        lua_getglobal(L, "PlayOperate");
    
        lua_newtable(L);
        lua_pushstring(L, "wChairID");
        lua_pushnumber(L, obj.wChairID);
        lua_settable(L, -3);
        lua_pushstring(L, "iHeroID");
        lua_pushnumber(L, obj.iHeroID);
        lua_settable(L, -3);
    
        lua_pushstring(L, "iChosenHeros");
        lua_newtable(L);
        for (i=0;i<16;++i)
        {
            lua_pushnumber(L, i);
            lua_pushnumber(L, obj.iChosenHeros[i]);
            lua_settable(L, -3);
        }
        lua_settable(L, -3);
    
        lua_call(L, 1, 1);
    
        lua_pushstring(L, "wChairID");
        int n=lua_gettop(L);
        lua_gettable(L, -2);
        obj.wChairID = (int)lua_tonumber(L, -1);
        lua_pop(L, 1);
        lua_pushstring(L, "iHeroID");
        lua_gettable(L, -2);
        obj.iHeroID = (int)lua_tonumber(L, -1);
        lua_pop(L, 1);
        lua_pushstring(L, "iChosenHeros");
        lua_gettable(L, -2);
        for (i=0;i<16;++i)
        {
            lua_pushnumber(L, i);
            lua_gettable(L, -2);
            obj.iChosenHeros[i]=(int)lua_tonumber(L, -1);
            lua_pop(L, 1);
        }
    
    }
    
    int main(int argc, char *argv[])
    {
        int i;
        Player obj;
    
        obj.wChairID = 1;
        obj.iHeroID  = 2;
    
        for(i=0; i<16; ++i)
            obj.iChosenHeros[i]=3;
    
        //print initial value
        printf( "The origin is blow:
    ");
        printf( "obj.wChairID = %d
    ", obj.wChairID);
        printf( "obj.iHeroID = %d
    ", obj.iHeroID);
        for(i=0; i<16; ++i)
            printf( "obj.iChosenHeros[%d] = %d
    ", i, obj.iChosenHeros[i]);
    
    
        /* initialize Lua */
        L = lua_open();
        if (NULL == L)
        {
            return -1;
        }
        /* load Lua base libraries */
        luaL_openlibs(L);
    
        /* load the script */
        luaL_dofile(L, "e:\aaa.lua");  //这里指定aaa.lua文件的位置
    
        /* call function */
        Operate(obj);
    
        /* print the result */
        printf( "The result is blow:
    ");
        printf( "obj.wChairID = %d
    ", obj.wChairID);
        printf( "obj.iHeroID = %d
    ", obj.iHeroID);
        for(i=0; i<16; ++i)
            printf( "obj.iChosenHeros[%d] = %d
    ", i, obj.iChosenHeros[i]);
    
        /* cleanup Lua */
        lua_close(L);
    
        return 0;
    
    }
    
    =============aaa.lua==========
    function PlayOperate(x)
        x.wChairID = x.wChairID+1
        x.iHeroID = x.iHeroID+1
        x.iChosenHeros[0]= 9
        x.iChosenHeros[1]= 10
        
        return x
    end
  • 相关阅读:
    转: requirejs压缩打包r.js使用示例 2 (~~很详细的教程)
    转:requirejs打包压缩r.js使用示例
    转: RequireJS Optimizer 的使用和配置方法
    转:requirejs:让人迷惑的路径解析(~~不错)
    转: requirejs中文api (详细)
    转: 让html5标签在ie8及以下的被正确解析的解决方案
    浏览器对body节点scrollTop解析的差异
    vue全局配置
    vue watch 深度监听以及立即监听
    Vue插件
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/7298142.html
Copyright © 2011-2022 走看看