Posted on 2012-08-02 16:02
魔のkyo 阅读(3765)
评论(1) 编辑 收藏 引用
lua 从 http://code.google.com/p/luaforwindows/ 取得
LuaTinker 可以从 http://download.csdn.net/download/esrrhs/3838889 取得
tolua++ 可以从 http://www.codenix.com/~tolua/ 取得
关于Lua与C/C++的交互
C/C++调用Lua的函数还是比较简单的,可以参考lua tinker的实现。
Lua调用C/C++的函数如果用最原始的方式有很大限制,只能调用类型为
typedef int (*lua_CFunction) (lua_State *L);
的函数,如果想调用任意类型的函数甚至C++的类成员函数就需要进行一些封装,有一些现成的库已经帮我们实现了。我试下来比较好用的就是lua tinker和tolua++。
lua tinker
license未知,官网没有找到,可以从这里下载到http://download.csdn.net/download/esrrhs/3838889
体积小,只有2个文件lua_tinker.h/lua_tinker.cpp
因为采用C++模板实现,绑定函数的参数个数有限制,当然可以自己扩展。
函数绑定到lua中的名称可以自定义,可以与C++中不同,例如加上特定前缀或后缀。
除了函数绑定还lua tinker还封装了函数调用,读取设置变量等操作。
tolua++
使用MIT license。官网http://www.codenix.com/~tolua/
这其实是一个工具,编写.pkg文件声明绑定的函数和类,通过tolua++.exe生成绑定代码(.cpp),然后在程序中调用生成的绑定代码来完成绑定。
需要通过下载的文件编译出tolua++.exe和一个lib,lib用来和自己的工程链接以支持绑定。
tolua++是用C实现的,因为绑定代码是通过工具分析pkg生成的,没有参数上的限制。
但限制了绑定函数在lua中的名称和C++中相同。
为了方便我将.pkg文件写成了
$#include "lua_interface.h"
$ifile "lua_interface.h"
将需要提供给lua的接口全部声明在lua_interface.h中。
当接口发生变化后,使用
tolua++.exe -n lua_interface -o lua_interface.cpp lua_interface.pkg
更新.cpp文件。