`

使用luabind完成c++和lua脚本调用示例备份

lua 
阅读更多
C++程序调用lua脚本并返回相应的值,和在lua中调用c++ 注册的函数和类型搞明白了。备份一下。



extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
#include
#include
void greet()
{         std::cout << "hello world!\n";
}
int add(int a,int b)
{
return a+b;
}
class User
{
private:
  User():id(0){ }
  ~User(){}
  static User* instance;
  int id;
public:
  static User& Instance(){
   if(!instance)
   {
    instance = new User;
    if(instance)return *instance;
   }
   return *instance;
  }
  int Id(){ return id;}
  void setid(int _id){ id = _id;}
};
User* User::instance = NULL;
/////////////脚本函数///////////////
User& instance()
{
return User::Instance();
}
////////////////////////////
extern "C"
int init(lua_State* L)
{         using namespace luabind;
open(L); 
lua_cpcall(L,luaopen_base,0);
module(L)  
  [     
  def("greet", &greet), 
  def("add",&add),     
  def("instance",&instance)     
   ]; 
module(L)
  [
  class_("User")
  .def("Id", &User::Id)
  .def("setid", &User::setid)
  ];
return 0;
}
int main()
{
lua_State* L = luaL_newstate();
init(L);
int ret = luaL_dofile(L, "test2.lua");
if(ret!=0){
  printf("执行LUA脚本文件出错:%s\n",lua_tostring(L,-1));
}
int res = luabind::call_function(L,"Int", 2, 23);
  printf("执行LUA脚本文件:%u\n",res);


lua_close(L);

return 0;
}
编译命令 g++ lua2.cpp -o lua2 -I/usr/local/include  -L/usr/local/lib  -llua -lluabind



lua脚本如下



greet()
print(add(2,4))
user = instance()
user:setid(4)
print(user:Id())




function Int(a, b)
return a*b
end


更多详细  http://www.cppblog.com/liangairan/articles/71131.html
分享到:
评论

相关推荐

    LuaBind 帮助你绑定C++和Lua的库

    LuaBind 是一个帮助你绑定C++和Lua的库.她有能力暴露 C++ 函数和类到 Lua . 她也有 能力支持函数式的定义一个Lua类,而且使之继承自C++或者Lua. Lua类可以覆写从 C++ 基类 继承来的虚函数. 她的目标平台是Lua 5.0 ,不...

    luabind 0.7 modified for lua 5.1

    按官方diff文件修改过的luabind代码,修正了在使用lua5.1时,编译luabind出现编译错误的兼容性问题: error C2065: \'LUA_NOREF\' : undeclared identifier

    LuaBind 源码 (Lua增强库)

    程序也必须使用和库一样的设定.可用的选项的介绍参见 Build options 章节. 如果你希望改变缺省的设置,推荐你通过修改命令行参数的方式来实现.(在Visual Studio 的工程设置项里面). 5 基本使用 为了使用LuaBind, ...

    C++项目游戏脚本辅助逆向开发框架.zip

    lua:通用的脚本功能,控制台界面通用的lua相关实现等。 OD:计划存放关于OD逆向分析的一些东西。 python:包括用python写的自动更新ida数据库信息的插件,其中python/ForFrame/PreBuild.py是用来帮助编译器生成assf...

    luabind、lua 测试

    用于lua 脚本测试,luabind,里面可以自己加脚本

    luabind_example_windows下代码示例.rar

    luabind-0.9.1在windows下的示例代码,内部包含了lua,boost的代码,且已编译完成,下载后即可运行,也可以自己重新编译,可以随意修改代码

    luabind (helps you create bindings between C++ and Lua)

    luabind is a library, inspired by and similar to Boost.Python, that helps you create bindings between C++ and Lua. It has the ability to expose functions and classes, written in C++, to Lua.

    luabind-0.9.1_linux下示例.zip

    luabind-0.9.1在linux下的示例代码,内部包含了lua,boost的代码,且已编译完成,下载后即可运行,也可以自己重新编译,可以随意修改代码

    Lua常用库BIN_LuaBind.zip

    BIN_LuaBind 是一个和 luabind、tolua 类似的库,提供了简洁的 C/C 到 lua 的绑定机制,但与之不同的是BIN_LuaBind 比他们更安全:lua 层不在直接依赖于 C/C 层指针,避免野指针引起宕机。除此之外,BIN_LuaBind 对 ...

    luabind派生C++类及相关问题(csdn)————程序.pdf

    luabind派生C++类及相关问题(csdn)————程序

    Cpp2Lua 导出c++到lua

    导出c++类、函数、变量等到lua的实现代码,提供思路。类似luabind、tolua++,部分特性如继承导出等暂未实现。

    luabind:提供对lua的类型安全绑定的支持的C ++库

    示例LUA: function init(id) mylib.print_message("in init. got: " .. id) local announce_id = mylib.announce("henry") mylib.print_message("announce got " .. announce_id) end function shutdown() ...

    luabind_example_windows下示例.rar

    luabind-0.9.1在windows下的示例代码,内部包含了lua,boost的代码,且已编译完成,下载后即可运行,也可以自己重新编译,可以随意修改代码

    protoc-gen-luabind:Google protobuf lua 端口,luabind 基础

    protoc-gen-luabind Google protobuf lua 端口,luabind 基础

    lua.5.1库应用luabind

    lua库应用可以绑顶C和C++语言应用的结合功能,交互调用执行此功能

    luabind-0.8.1

    luabind源码包,支持c++与lua的交互;它可以处理继承和模板类

    lua和luabind测试例子

    自已学lua和luabina的时候,写的测试例子,可供初学者使用

    luawrapper

    LuaBind 是一个帮助你绑定C++和Lua的库.她有能力暴露 C++ 函数和类到 Lua . 她也有 能力支持函数式的定义一个Lua类,而且使之继承自C++或者Lua. Lua类可以覆写从 C++ 基类 继承来的虚函数. 她的目标平台是Lua 5.0 ,不...

    lua+luabind 的lib库,免编译

    直接下载使用,已经编译好的lib文件 有需要的直接拿走,绝对可以使用,本人自己也在使用,lua5.14版本和luabind9.01版本

    luabind-0.9.1.lib

    luabind-0.9.1.lib 使用VS2008,lua5.1.2,boost1.47.0编译好的luabind-0.9.1,由于是采用静态编译的LIB,文件比较大。使用方法也可参照我的CSDN的博客。

Global site tag (gtag.js) - Google Analytics