cocos2dx 3.0 研究(5)lua之tolua测试

本文介绍了一个简单的tolua测试案例,通过编写pkg文件并使用tolua工具生成C++代码来实现Lua脚本与C++函数的绑定。文章详细展示了从注册C++函数到Lua环境的全过程,并通过main函数进行了功能验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、tolua测试

1.1、pkg文件的编写(1.pkg)

    int test();

没错,我的例子就这么简单!

1.2、根据pkg文件生成cpp文件(注册接口用)

    ./tolua -o test.cpp 1.pkg

生成的test.cpp的代码如下:


/*
 ** Lua binding: 1
 */


#include "tolua.h"


#ifndef __cplusplus
#include <stdlib.h>
#endif
#ifdef __cplusplus
extern "C" int tolua_bnd_takeownership (lua_State* L); // from tolua_map.c
#else
int tolua_bnd_takeownership (lua_State* L); /* from tolua_map.c */
#endif
#include <string.h>


/* Exported function */
TOLUA_API int tolua_1_open (lua_State* tolua_S);
LUALIB_API int luaopen_1 (lua_State* tolua_S);




/* function to register type */
static void tolua_reg_types (lua_State* tolua_S)
{
}


/* function: test */
static int tolua_1_test00(lua_State* tolua_S)
{
#ifndef TOLUA_RELEASE
    tolua_Error tolua_err;
    if (
            !tolua_isnoobj(tolua_S,1,&tolua_err)
       )   
        goto tolua_lerror;
    else
#endif
    {   
        {   
            int tolua_ret = (int)  test();
            tolua_pushnumber(tolua_S,(lua_Number)tolua_ret);
        }   
    }   
    return 1;

#ifndef TOLUA_RELEASE
tolua_lerror:
    tolua_error(tolua_S,"#ferror in function 'test'.",&tolua_err);
    return 0;
#endif
}


/* Open lib function */
LUALIB_API int luaopen_1 (lua_State* tolua_S)
{
    tolua_open(tolua_S);
    tolua_reg_types(tolua_S);
    tolua_module(tolua_S,NULL,0);
    tolua_beginmodule(tolua_S,NULL);
    tolua_function(tolua_S,"test",tolua_1_test00);
    tolua_endmodule(tolua_S);
    return 1;
}
/* Open tolua function */
TOLUA_API int tolua_1_open (lua_State* tolua_S)
{
    lua_pushcfunction(tolua_S, luaopen_1);
    lua_pushstring(tolua_S, "1");
    lua_call(tolua_S, 1, 0);
    return 1;
}


这样我们就成功的将test()这个函数注册给了lua

1.3 、增加main函数进行测试

int test()

{

    return 6666;

}

int main()

{
    int  tolua_tarray_open (lua_State*);
    lua_State* L = luaL_newstate();
    luaL_openlibs(L);
    tolua_1_open(L);


    luaL_dofile(L,"1.lua");


    lua_close(L);


    cout <<"hello world" << endl;
    return 1;

}


编译命令为

    g++ -c -g -ansi -Wall -g -I../../include -I/usr/local/include  -o test.o test.cpp
    g++ -g -ansi -Wall -g -I../../include -I/usr/local/include  -o test test.o  -L../../lib -L/usr/local/lib -ltolua -llua

注意:

    如果编译的是cpp文件的时候包含lua头文件的时候要加上extern关键字

运行结果

-----------

6666
hello world

----------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值