最简单的c++/lua中间层 ---- XScript
XScript介绍
lua是一种轻量小巧的脚本语言,免费开源,简单易学,c/c++这类低级语言胜在能够直接与操作系统打交道,从而能够最大限度的利用系统资源,但是写逻辑不太方便,“C++/lua”是游戏界比较常用的一种开发语言解决方案,用c++做服务器底层,再嵌入lua编写业务逻辑是比较常用的一种解决方案,用c++做服务器底层,再嵌入lua编写业务逻辑,这种组合能够比较好的平衡性能与开发效率。
XScript是一个跨平台c++/lua交互库,内置lua面向框架,支持远程调试,能够编译成静态库或者动态库,能够快速集成到新项目中。
git地址 https://gitee.com/SH-Jun_admin/XScript.git
注册cpp全局函数
#include <stdio.h>
#include <stdlib.h>
#include <core/XScript.h>
#include <luabinder/CScriptLua.h>
#ifndef _WIN32
#include <unistd.h>
#else
#include <direct.h>
#endif
using namespace XS;
void GlobalFun(const char* szContent)
{printf("GlobalFun %s\n", szContent);
}
REGIST_GLOBALFUNCTION(GlobalFun)const char* szLuaPath = "E:/open-src/XScript/samplers/BlogTest/lua/test.lua";
int main(int argc, char** args)
{CScriptBase* pScript = new CScriptLua(nullptr, 123456);char szWorkDir[2048];getcwd(szWorkDir, ELEM_COUNT(szWorkDir));pScript->AddSearchPath(szWorkDir);pScript->RunFile(szLuaPath);char ch = getchar();delete pScript;return 0;
}
print("this is a test file");
GlobalFun("this is a GlobalFun")
注册并继承c++ class
#include <stdio.h>
#include <stdlib.h>
#include <core/XScript.h>
#include <luabinder/CScriptLua.h>
#include <string>
#ifndef _WIN32
#include <unistd.h>
#else
#include <direct.h>
#endif
using namespace std;
using namespace XS;class CActor
{
public:CActor(const char* szName, const char *szIcon){m_szName = szName;m_szHeadIcon = szIcon;}~CActor(){};string GetName(){return m_szName;}virtual int GetClassID(){ return 0; }private:string m_szName;string m_szHeadIcon;};void GlobalFun(CActor* pActor)
{printf("void GlobalFun(CActor* pActor)\n");printf("GlobalFun %d %s\n", pActor->GetClassID(), pActor->GetName().c_str());
}
REGIST_GLOBALFUNCTION(GlobalFun)DEFINE_CLASS_BEGIN(CActor)REGIST_CONSTRUCTOR(const char*, const char*)REGIST_DESTRUCTOR()REGIST_CLASSFUNCTION(GetName)REGIST_CALLBACKFUNCTION(GetClassID)
DEFINE_CLASS_END();const char* szLuaPath = "E:/open-src/XScript/samplers/BlogTest/lua/test.lua";
int main(int argc, char** args)
{CScriptBase* pScript = new CScriptLua(nullptr, 123456);char szWorkDir[2048];getcwd(szWorkDir, ELEM_COUNT(szWorkDir));pScript->AddSearchPath(szWorkDir);pScript->RunFile(szLuaPath);char ch = getchar();delete pScript;return 0;
}
print("this is a test file");
LuaActor = LuaActor or class(CActor)
function LuaActor:GetClassID()print("this is LuaActor:GetClassID")return 35
end
local actor = LuaActor:new("bob", "xxx.png")
GlobalFun(actor)
最简单的c++/lua中间层 ---- XScript相关推荐
- java使用lua脚本操作 redis_在Redis中使用简单强大的Lua脚本
Redis分布式锁加锁 前段时间写Redis分布式锁,想着在小灰文章的基础上再总结一下,这样能有更深的印象,顺便把Lua脚本分享一下,如果项目中使用Redis比较多,那么Lua脚本一定是会用到的,因为 ...
- 【木头Cocos2d-x 028】Lua篇(第03章):简单解析Lua的堆栈
[木头Cocos2d-x]Lua篇(第03章):简单解析Lua的堆栈 上一章传送门:http://blog.csdn.net/musicvs/article/details/8440919 经过上一章 ...
- [整理]Unity3D游戏开发之Lua
原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果 ...
- Java并发:分布式应用限流 Redis + Lua 实践
任何限流都不是漫无目的的,也不是一个开关就可以解决的问题,常用的限流算法有:令牌桶,漏桶.在之前的文章中,也讲到过,但是那是基于单机场景来写. 之前文章:接口限流算法:漏桶算法&令牌桶算法 然 ...
- Lua中的模块与module函数详解
很快就要开始介绍Lua里的"面向对象"了,在此之前,我们先来了解一下Lua的模块. 1.编写一个简单的模块 Lua的模块是什么东西呢?通常我们可以理解为是一个table,这个tab ...
- Redis Lua脚本中学教程(下)
在中学教程的上半部分我们介绍了Redis Lua相关的命令,没有看过或者忘记的同学可以步行前往直接使用机票Redis Lua脚本中学教程(上).今天我们来简单学习一下Lua的语法. 在介绍Lua语法之 ...
- Lua和C++交互总结(很详细)
出处:http://blog.csdn.net/shun_fzll/article/details/39120965 一.lua堆栈 要理解lua和c++交互,首先要理解lua堆栈. 简单来说,Lua ...
- [转载]Lua和C++交互详细总结
原文请看:Lua和C++交互详细总结 转自:http://cn.cocos2d-x.org/tutorial/show?id=1474 一.Lua堆栈 要理解Lua和C++交互,首先要理解Lua堆栈. ...
- lua打开是二进制代码_物联网的构建:使用Lua高级语言进行嵌入式开发
语言无好坏,适合就行...... 选择一种语言进行开发,其实就是选择一款趁手的工具,比如拧螺丝,套筒扳手显然要比活动扳手更方便.工具趁不趁手,使用了才知道,所以不要拒绝去学习新的语言. 一.关于Lua ...
最新文章
- 科普| 越来越火的图数据库究竟是什么?
- (-215:Assertion failed) dst.data == (uchar*)dst_ptr in function 'cvShowImage'
- matlab小技巧与verilog小技巧
- php数组中删除元素
- MATLAB GPU编程基础
- java项目引入json配置,TS-28 配置tsconfig.json(3):工程引用
- linux SHELL之结构化命令
- 笨办法学 Python · 续 引言
- Android+Jquery Mobile学习系列(3)-创建Android项目
- python需要下载哪些软件-学python下载什么软件开发
- [透析] 卷积神经网络CNN究竟是怎样一步一步工作的?
- 最新北风网 web全栈视频教程
- 分析手段之一:质谱仪GCMS质谱技术
- 结合P2P软件使用Ansible分发大文件 1
- 基于NanoPi3(三星S5P6818)的u-boot移植(一)
- webpack抽离 公共代码
- 使用属性在 ASP.NET Web API 2 路由创建一个 REST API
- excel编辑csv文件
- 华为跑了?深圳终究留不住华为
- 是时候将你的Python版本升级到3.8了!为什么我选择Python3.8?
热门文章
- MySQL之幻读的详解、实例及解决办法
- TSI装置探头安装办法及系统简述
- apisix集群安装测试
- 剖析《最后生还者 第二部》叙事系统的成就与败笔(下)
- php允许上传的文件后羿_后羿SEO:浅谈seo外链建设需要注意的几个问题!
- python处理word表格excel_用python轻轻松松操作Excel、Word、CSV,一文就够了!
- html .map遍历,Map遍历四种常用方法
- 如何用STM32实现定时功能并报警(附代码加原理讲解,亲测)
- 04-0001 Matlab新手指导
- h5 canvas仿 Photoshop 绘制调色板