探索LUA用于API级的测试中(用C对Lua进行扩展)
来源:互联网 发布:雅马哈p电脑软件 编辑:程序博客网 时间:2024/05/16 06:46
LUA因《愤怒的小鸟》一炮走红,绝非偶然。早在N多年前,《魔兽世界》的插件就开始用LUA了。如今LUA被广泛应用到游戏开发中,特别是移动平台。
LUA的特点是纯C写成,带来了强大的跨平台性,最近项目组做了一个各种手机平台的组件,需要对组件进行测试,其中绝大多数平台都是基于C的,因此用LUA编写测试的脚本,将有一劳永逸的效果。
对C的API进行测试,首先要解决的就是LUA与C的交互,基本上是LUA调C。网上搜了一圈,没有合自己需求的,大多数是拷来拷去,但是有几个原理讲得还可以,总结一下,基本是以下几点:
1,需要一个LUA的解析器,www.lua.org下载。下一份源代码。
2,在C代码中定义一个可以被LUA调用的函数,其基本形式一定要是这样
int function_name (lua_State *L)
{
...
return 1;
}
3,在LUA状态机(LUA运行环境)中注册这个函数,可以用lua_register或者 lua_pushfunction和lua_setglobal()。
lua_register(L, n, f)
lua_pushcfunction(L, f) 和 lua_setglobal(L, n)
L可以理解成LUA的运行环境,n是在lua脚本中调用时的名字,f是c语言中定义的函数名称
通过以上三步,写一个LUA脚本,就可以调用定义在C中的函数了。
具体步骤如下:
1,建一个C工程,我是用VS2010建了一个CPP的空项目。
2,下载Lua的源代码,把src文件夹下的文件除了luac.c这个文件不要,其他的.h和.c文件都加入到项目中
3,直接点生成就可以生成一个Lua解析器了。
4,因为有源代码,可以把需要被Lua调用C函数注册到Lua的状态机中,这样Lua脚本就可以调了。具体如下:
4.1,写一个可以被Lua调用的C函数原形,注意一定要符合上面说的形式。
int Testmethod_LUA(lua_State* L)
{
lua_pushnumber(L, 10);//lua传参采用栈的形式,这里可以理解成Testmethod_LUA这个函数返回10
return 1;
}
4.2,把这个函数注册到LUA的运行环境中。在lua.c这个文件的main函数中,
lua_State *L = lua_open();
上面这句之后加上注册的函数
luaL_openlibs(L);//加载Lua基本库
lua_register(L, "callcfunc", Testmethod_LUA);//callcfunc这个是lua脚本中调的时候的函数名
5,再编译一下这个工程,里面就有一个名叫C名称叫Testmethod_LUA,lua脚本名称叫callcfunc的函数了。
6,编写Lua脚本调用这个函数
local c = callcfunc();
print(c);
7,输出结果为:
参考:http://blog.csdn.net/sumoyu/article/details/2592693
- 探索LUA用于API级的测试中(用C对Lua进行扩展)
- LUA中C API的熟悉实例
- cocos2dx中对lua脚本进行覆盖率测试
- Lua编程(六)C对Lua函数的调用
- lua的c api 总结
- lua的c api 总结
- lua(7)-C API
- 在C/C++中 用C API遍历lua table
- 用LUA扩展cpp程序的几个测试
- Lua 在C程序中进行Lua表操作
- Lua 中栈操作的C API示例
- Lua与C——扩展Lua(四)
- Lua笔记-关于lua table的C API
- Lua笔记-关于lua table的C API
- Lua笔记-关于lua table的C API
- C语言中调用lua 脚本执行的效率测试
- lua c api
- LUA C API
- C++_多态与虚函数
- Android中的Activity生命周期
- 设计模式
- Effective C# 标准析构模式的实现
- SQL 注入
- 探索LUA用于API级的测试中(用C对Lua进行扩展)
- C#经典试题
- C#中的事件处理机制
- POJ2506
- hdu3068回文串Manacher算法
- BUG
- 我想我是海
- 我想我是海 梦坠西子湖
- Codeblocks+MinGW+wxWidgets搭建方法