C++和Lua的交互调用

来源:互联网 发布:淘宝抢购秒杀怎么抢 编辑:程序博客网 时间:2024/05/19 23:00
  1. <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">新建一个Quick工程,用Xcode编译软件打开</span>
  2. 在此处新建一个C++文件

  3. 在Test.h里面引入三个头文件,添加一些方法
    <pre name="code" class="cpp">#include <stdio.h>#include "cocos2d.h"#include <string>USING_NS_CC;extern "C"{#include "lua.h"#include "lualib.h"#include "lauxlib.h"}class Test {    public:        Test();    void fangwenbianlian();    void loadFunction();    static int l_show(lua_State * l);    ~Test();private:    lua_State *luatest;};

    4.Test.cpp.每个方法都有详细注释,应该看得懂

    #include "Test.h"Test::Test(){        //声明一个指针        luatest =luaL_newstate();        //打开Lua库        luaL_openlibs(luatest);        //压入函数,        lua_pushcfunction(luatest, l_show);        lua_setglobal(luatest, "l_show");        //加载Lua文件        std::string path = FileUtils::getInstance() -> fullPathForFilename("Mylua.lua");        luaL_dofile(luatest,path.c_str());        lua_pcall(luatest, 0, 0, -1);        //测试函数        fangwenbianlian();        loadFunction();    }//访问Lua里的变量 void Test::fangwenbianlian(){    lua_pcall(luatest, 0, 0, -1);    CCAssert(luatest,"文件读取错误!!");    lua_getglobal(luatest, "username");    char * rlt = (char*)lua_tostring(luatest, -1);    CCLOG("username is:%s",rlt);    }//访问Lua里的函数void Test::loadFunction(){    lua_getglobal(luatest, "getrlt");    lua_pushnumber(luatest, 12);        lua_pcall(luatest,1, 2, -1);    CCAssert(luatest,"文件读取错误!!");        char *rlt = (char*)lua_tostring(luatest, -1);    char *rlt1 = (char*)lua_tostring(luatest, -2);    CCLOG("rlt ==>%s",rlt);    CCLOG("rlt ==>%s",rlt1);    }int Test:: l_show(lua_State * l){        lua_pushstring(l, "C++函数里的内容");        return 1;}Test::~Test(){    if (luatest)    {        delete luatest;        luatest=NULL;    }}
    5.同个目录下新建一个简单的Lua文件

    6.
    Lua文件里写入
    print("Test My Lua!")username = "ChenApple" function getrlt(x)print("hungjinhui")    print("传进来的参数为:" ..x)return "OK","YES"endprint("我调了C++函数  " .. l_show())

    7.最后一步,也是最重要的,
    在AppDelegate.cpp,引入Test.h头文件.然后在

    bool AppDelegate::applicationDidFinishLaunching()函数里

    实例一个Test对象

    Test *test =new Test();


    以上就是一个小Demo



0 0
原创粉丝点击