`

使用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
分享到:
评论

相关推荐

    lua_test.rar_C++_c# lua_c++ lua_lua_lua调用C++

    本示例中的"lua_test.rar"文件集是一个关于C++与Lua交互的实践案例,主要探讨了如何通过Lua脚本调用C++编写的函数。下面我们将详细探讨这个主题。 首先,Lua是一种轻量级的脚本语言,它简洁、易学,常被用于游戏...

    luabind、lua 测试

    而Luabind是针对Lua的一个C++绑定库,它使得C++对象和函数能够方便地与Lua脚本进行交互。这篇测试文件“luabind、lua 测试”显然关注的是如何在C++项目中利用Luabind来集成和测试Lua脚本。 首先,我们要理解Lua的...

    luabind-0.9.1_linux下示例.zip

    首先,luabind的核心功能在于它能够将C++的对象和函数绑定到Lua脚本中,使得在Lua中可以直接调用C++的代码,同时也能让C++代码调用Lua的函数。这种双向交互的能力使得lua不仅仅是一种脚本语言,更成为C++应用程序中...

    luabind_example_windows下代码示例.rar

    luabind 是一个 C++ 库,它允许程序员将 C++ 类和函数绑定到 Lua 脚本语言,使得 Lua 可以无缝调用 C++ 的功能,从而在游戏开发、自动化测试等领域发挥强大的作用。luabind-0.9.1 版本提供了在 Windows 平台上的示例...

    lua和luabind测试例子

    而Luabind的作用是将C++的类和对象映射到Lua环境中,使得在Lua脚本中可以像操作原生类型一样操作这些C++对象。这极大地增强了Lua的灵活性和实用性。通过Luabind,你可以定义C++类的构造函数、成员函数、静态函数和...

    luabind_example_windows下示例.rar

    这些示例通常会展示如何创建和注册 C++ 类,如何在 Lua 脚本中调用这些类,以及如何从 Lua 调用 C++ 函数。 4. **学习与探索**:通过阅读和修改示例代码,你可以深入理解 luabind 的工作原理,学习如何将你的 C++ ...

    luabind-0.8.1

    3. **调用C++函数**:在Lua脚本中,可以直接调用已注册的C++函数,luabind会负责实际的函数调用和参数匹配。 4. **创建和使用C++对象**:Lua代码可以创建C++对象,调用其方法,甚至进行继承和多态操作。 在luabind-...

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

    在C++和Lua的交互中,luabind库提供了一种在Lua中派生C++类的能力,从而实现了在脚本语言中利用多态性的功能。根据luabind的文档,我们可以看到这种机制允许在Lua中创建C++类的子类,并在C++中调用这些子类的方法,...

    cocos2d 圆周运动 c++到lua的封装

    在游戏开发领域,Cocos2d 是一个广泛使用的2D游戏引擎,支持多种编程语言,包括...通过C++编写动作类并利用C++到Lua的绑定技术,开发者可以在Lua脚本中方便地控制游戏对象进行圆周运动,增强了游戏的动态性和可玩性。

    Luabind 使用手册 中文版 高清PDF v0.9.1

    - 通过 Luabind 可以在 Lua 脚本中创建和操作 C++ 类的对象实例。 - **4.2.3 泛型接口** - 支持泛型函数的绑定,允许在 Lua 中以统一的方式调用不同类型的 C++ 函数。 **4.3 高级绑定技术** - **4.3.1 继承支持*...

    模块化矩阵元素方法实现_C++_Lua_下载.zip

    3. **接口绑定**:在C++和Lua之间进行通信的桥梁是接口绑定代码,它通常使用如luabind或sol2这样的库来实现。这些库使得C++函数能够被Lua调用,反之亦然,实现了语言间的无缝交互。 4. **示例和测试**:项目可能...

    LuaStudy_lua开发_DEMO_

    LuaStudy 是一个针对 Lua 开发的演示项目,旨在帮助初学者理解如何将 Lua 脚本语言与 C++ 结合使用,以便在实际项目中利用 Lua 的灵活性和易读性来扩展程序功能。这个DEMO提供了基础的学习材料,让你能够快速入门 ...

    luabindlib

    Lua脚本可以创建和操作游戏对象,调用C++编写的物理引擎、图形渲染等功能,实现灵活的游戏设计和扩展。 总结,luabindlib为C++与Lua的交互提供了一个强大而便捷的桥梁。通过它,开发者可以充分利用两种语言的优势,...

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

    8. **项目使用流程**: 通常,用户首先编写.proto文件定义数据结构,然后使用protoc-gen-luabind生成lua绑定代码,最后在lua脚本中导入这些代码,就可以直接操作protobuf数据了。 9. **代码示例**: 在lua中,可以...

    LuaTinker_0.5b 源码

    这个库的设计目标是提供一个轻量级且易于使用的解决方案,让开发者能够快速地将C++类和函数绑定到Lua脚本环境中,使得在游戏开发、脚本驱动的应用程序或其他需要动态扩展性的项目中,可以利用Lua的强大脚本能力。...

    lua (vc环境)学习笔记(学习代码)

    使用`lua_register()`或`lua_pushcfunction()`可以将C++函数绑定到lua全局表,这样lua脚本就可以直接调用。而C++通过`lua_tostring()`、`lua_tonumber()`等函数读取lua栈上的数据。 4. **tolua++或luabind**: ...

    luabind:Luabind是一个库,可帮助您在C ++和Lua之间创建绑定

    3. **在Lua中使用**:一旦绑定完成,你就可以在Lua脚本中像使用原生的Lua类型一样使用这些C++对象。Lua代码可以直接创建C++对象,调用其方法,甚至可以访问私有和受保护的成员(如果允许的话)。 4. **回调和事件...

    lua网页资料整理

    3. **Lua与C/C++交互**:学习如何使用Lua的C API创建和注册C函数,以及如何加载和调用Lua脚本。 4. **模块化编程**:了解如何使用require和package系统来组织和管理代码,以及如何编写和使用自定义的Lua模块。 5. ...

    LuaBind 中文手册

    LuaBind 是一款功能强大的库,用于在 C++ 和 Lua 之间建立桥梁,使得两者能够互相调用对方的函数和对象。它不仅简化了 C++ 代码与 Lua 脚本之间的交互,而且提供了丰富的接口来扩展 Lua 的功能。 #### 二、安装与...

Global site tag (gtag.js) - Google Analytics