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相关推荐

  1. java使用lua脚本操作 redis_在Redis中使用简单强大的Lua脚本

    Redis分布式锁加锁 前段时间写Redis分布式锁,想着在小灰文章的基础上再总结一下,这样能有更深的印象,顺便把Lua脚本分享一下,如果项目中使用Redis比较多,那么Lua脚本一定是会用到的,因为 ...

  2. 【木头Cocos2d-x 028】Lua篇(第03章):简单解析Lua的堆栈

    [木头Cocos2d-x]Lua篇(第03章):简单解析Lua的堆栈 上一章传送门:http://blog.csdn.net/musicvs/article/details/8440919 经过上一章 ...

  3. [整理]Unity3D游戏开发之Lua

    原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果 ...

  4. Java并发:分布式应用限流 Redis + Lua 实践

    任何限流都不是漫无目的的,也不是一个开关就可以解决的问题,常用的限流算法有:令牌桶,漏桶.在之前的文章中,也讲到过,但是那是基于单机场景来写. 之前文章:接口限流算法:漏桶算法&令牌桶算法 然 ...

  5. Lua中的模块与module函数详解

    很快就要开始介绍Lua里的"面向对象"了,在此之前,我们先来了解一下Lua的模块. 1.编写一个简单的模块 Lua的模块是什么东西呢?通常我们可以理解为是一个table,这个tab ...

  6. Redis Lua脚本中学教程(下)

    在中学教程的上半部分我们介绍了Redis Lua相关的命令,没有看过或者忘记的同学可以步行前往直接使用机票Redis Lua脚本中学教程(上).今天我们来简单学习一下Lua的语法. 在介绍Lua语法之 ...

  7. Lua和C++交互总结(很详细)

    出处:http://blog.csdn.net/shun_fzll/article/details/39120965 一.lua堆栈 要理解lua和c++交互,首先要理解lua堆栈. 简单来说,Lua ...

  8. [转载]Lua和C++交互详细总结

    原文请看:Lua和C++交互详细总结 转自:http://cn.cocos2d-x.org/tutorial/show?id=1474 一.Lua堆栈 要理解Lua和C++交互,首先要理解Lua堆栈. ...

  9. lua打开是二进制代码_物联网的构建:使用Lua高级语言进行嵌入式开发

    语言无好坏,适合就行...... 选择一种语言进行开发,其实就是选择一款趁手的工具,比如拧螺丝,套筒扳手显然要比活动扳手更方便.工具趁不趁手,使用了才知道,所以不要拒绝去学习新的语言. 一.关于Lua ...

最新文章

  1. 科普| 越来越火的图数据库究竟是什么?
  2. (-215:Assertion failed) dst.data == (uchar*)dst_ptr in function 'cvShowImage'
  3. matlab小技巧与verilog小技巧
  4. php数组中删除元素
  5. MATLAB GPU编程基础
  6. java项目引入json配置,TS-28 配置tsconfig.json(3):工程引用
  7. linux SHELL之结构化命令
  8. 笨办法学 Python · 续 引言
  9. Android+Jquery Mobile学习系列(3)-创建Android项目
  10. python需要下载哪些软件-学python下载什么软件开发
  11. [透析] 卷积神经网络CNN究竟是怎样一步一步工作的?
  12. 最新北风网 web全栈视频教程
  13. 分析手段之一:质谱仪GCMS质谱技术
  14. 结合P2P软件使用Ansible分发大文件 1
  15. 基于NanoPi3(三星S5P6818)的u-boot移植(一)
  16. webpack抽离 公共代码
  17. 使用属性在 ASP.NET Web API 2 路由创建一个 REST API
  18. excel编辑csv文件
  19. 华为跑了?深圳终究留不住华为
  20. 是时候将你的Python版本升级到3.8了!为什么我选择Python3.8?

热门文章

  1. MySQL之幻读的详解、实例及解决办法
  2. TSI装置探头安装办法及系统简述
  3. apisix集群安装测试
  4. 剖析《最后生还者 第二部》叙事系统的成就与败笔(下)
  5. php允许上传的文件后羿_后羿SEO:浅谈seo外链建设需要注意的几个问题!
  6. python处理word表格excel_用python轻轻松松操作Excel、Word、CSV,一文就够了!
  7. html .map遍历,Map遍历四种常用方法
  8. 如何用STM32实现定时功能并报警(附代码加原理讲解,亲测)
  9. 04-0001 Matlab新手指导
  10. h5 canvas仿 Photoshop 绘制调色板