C++ 调用 Lua
直接上代码:
1:c++代码
#include <lua.hpp>
#include <LuaBridge/LuaBridge.h> #include <iostream>
#include <string> class A
{
public:
void action()
{
std::cout<<"Hello I am A\n";
} virtual void doPrint(int a,int b)
{
std::cout<<"in A a:"<<a<<"b:"<<b<<std::endl;
} std::string goodMan() const
{
return "goodman";
}
}; class B : public A
{
public:
void hello(const std::string& info) const
{
std::cout<<"hello:"<<info<<std::endl;
} virtual void doPrint(int a, int b) override
{
std::cout<<"in B just"<<(a + b) <<std::endl;
}
}; void globalFunction()
{
std::cout<<"hello this is a global func\n";
} bool reloadLuaScript(lua_State* L, const std::string& luafile)
{
int state = luaL_dofile(L, luafile.c_str());
if(state != LUA_OK)
{
return false;
}
return true;
} void registerClassAndFunctions(lua_State* L)
{
using namespace luabridge;
//注册全局函数和类函数
getGlobalNamespace(L).addFunction("gloabalFunction",globalFunction);
getGlobalNamespace(L)
.beginClass<A>("A")
.addFunction("action",&A::action)
.addFunction("doPrint", &A::doPrint)
.addFunction("goodMan", &A::goodMan)
.endClass()
.deriveClass<B,A>("B")
.addFunction("hello", &B::hello)
.endClass();
} void testCallLua(lua_State* L)
{
A a;
lua_getglobal(L,"testA");
luabridge::push(L, &a);
lua_pcall(L,1,0,0);
} int main(int argc, char** argv)
{
lua_State* L = luaL_newstate(); luaL_openlibs(L);
std::cout<<"try load file "<<argv[1]<<std::endl; auto ok = reloadLuaScript(L, argv[1]);
if(!ok)
{
std::cout<<"load lua file failed\n";
}
else
{
registerClassAndFunctions(L);
testCallLua(L);
}
lua_close(L);
L = nullptr;
}
2:Lua代码
--print("hello");
--[[
this is note
这个是多行注释
--]]
print("This is myWorld!\n");
function testA(a)
a:action();
a:doPrint(1,2);
end
~
~
3:编译运行
[root@10-120-10-106 NewChart]# g++ -std=c++11 -o testlua testLua.cpp -llua -ldl
[root@10-120-10-106 NewChart]# ./testlua abc.lua
try load file abc.lua
This is myWorld! Hello I am A
in A a:1b:2
C++ 调用 Lua的更多相关文章
- c++调用lua
我们主要解决如下几个问题: 转:http://www.cnblogs.com/zisou/p/cocos2dx-lua2.html http://www.cnblogs.com/sevenyuan/p ...
- vs如何在C++中调用Lua
最近Cocos2dx的学习卡壳了,一般的照抄代码我不想写上来,但想示例也想得我头晕...为了放松大脑调整状态于是开始学习Lua.Lua的语法学习还是比较简单的,学过javascript或者vbscri ...
- vs2013如何在C++中调用Lua(二)
Lua学习笔记 vs2013如何在C++中调用Lua (此为转载教程) 本人试过完全可行 一.准备工作 1.下载Lua源码,地址:http://www.lua.org/download.html(我用 ...
- C中调用Lua函数
我们先来看一个简单的例子: lua_State* L = NULL; // 内部调用lua函数 double f(double x, double y) { double z; lua_getglob ...
- cocos2dx之C++调用Lua
原文地址:http://blog.csdn.net/dingkun520wy/article/details/49839701 1.引入头文件 #include "cocos2d.h&quo ...
- C语言中调用Lua
C语言和Lua天生有两大隔阂: 一.C语言是静态数据类型,Lua是动态数据类型 二.C语言需要程序员管理内存,Lua自动管理内存 为了跨越世俗走到一起,肯定需要解决方案. 解决第一点看上去比较容易,C ...
- VC和VS调用Lua设置以及Lua C API使用。
通过c++调用lua 脚本, 环境VC++6.0 lua sdk 5.1.4 在调用前先认识几个函数.1.调用lua_open()将创建一个指向Lua解释器的指针.2. luaL_ope ...
- Java调用Lua脚本(LuaJava使用、安装及Linux安装编译)
依赖包(附件有下载): 包名 类型 操作系统 luajava-1.1.jar jar ALL libluajava-1.1.so .so linux luajava-1.1.dll .dll wind ...
- Java调用Lua(转)
Java 调用 Lua app发版成本高,覆盖速度慢,覆盖率页低.一些策略上的东西如果能够从服务端控制会方便一些.所以考虑使用Lua这种嵌入式语言作为策略实现,Java则是宿主语言. 总体上看是一个模 ...
- 简述C/C++调用lua中实现的自定义函数
1.首先说下目的,为什么要这么做 ? 正式项目中,希望主程序尽量不做修改,于是使用C/C++完成功能的主干(即不需要经常变动的部分)用lua这类轻量级的解释性语言实现一些存在不确定性的功能逻辑:所以, ...
随机推荐
- UWA 转载
性能优化,进无止境-内存篇 https://blog.uwa4d.com/archives/optimzation_memory_1.html https://blog.uwa4d.com/archi ...
- kettle的系列教程
kettle--window开发环境和linux运行环境的迁移 kettle的输入输出组件和脚本组件 kettle--变量的使用 kettle的资源库 kettle的job kettle的hello ...
- 我发起了一个用 .Net 编写的 源代码管理工具 开源项目 SourceKit
发起这个 项目 的 起因 是 GitHub . Github 的 使用技能 俨然已经成了 一项新技术 , 这不是 工具 的 本意 . 我用过的 源代码 管理工具 不多, SVN 我觉得不错 . 常用 ...
- Java NIO Reactor模式
一.NIO介绍: NIO模型: 1.Channel为连接通道,相当于一个客户端与服务器的一个连接,Selector为通道管理器,将Channel注册到Selector上,Selector管理着这些Ch ...
- VMware虚拟机里centos7下安装mysql5.6并授权远程连接Navicat
这节来安装Mysql5.6,并远程授权连接本地windows的Navicat,可以根据以下步骤安装.此文章为自己收藏,必要时拿出来直接用的,有需要的友友可以查看查看的.文章图片有借助于网络的. 1.新 ...
- Oracle 增加、修改、删除字段
分别对T_USER表 进行增加name字段, 修改name字段,删除name字段 /*增加列表*/ ALTER TABLE T_USERS ADD name varchar2(512) ; /*删除列 ...
- C# 多线程控制
C# 多线程控制 通讯 和切换 一.多线程的概念 Windows是一个多任务的系统,如果你使用的是windows 2000及其以上版本,你可以通过任务管理器查看当前系统运行的程序和进程.什么是进 ...
- Go 并发控制--WaitGroup的使用
开发过程中,经常task之间的同步问题.例如,多个子task并发完成一部分任务,主task等待他们最后结束. 在Go语言,实现同步的一种方式就是WaitGroup. Example package m ...
- linux 如何运行rpm
rpm -ivh linuxqq-v1.0.2-beta1.i386.rpm
- 创建virtualenv虚拟环境
这个部分知识我在之前的随笔里记过笔记. 传送门:http://www.cnblogs.com/0bug/p/8598458.html 本文只演示Windos下virtualenv环境的使用: 首先,确 ...