lua和C++的交互(1)
/*
以前听的一个故事,当年Java的创造者讲课的时候,一开始先拿一个简单的不能简单的小例子,
不断的扩展,最后成为一个复杂而完美的程序。
一个重要之重要的概念,就是栈。Lua与别的语言交互以及交换数据,是通过栈完成的。
*/
#include <iostream>
using namespace std; extern "C" //这部分按C语言进行编译而不是C++
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
} class CLuaFn
{
public:
CLuaFn(void);
~CLuaFn(void); void Init(); //初始化Lua对象指针参数
void Close(); //关闭Lua对象指针 bool LoadLuaFile(const char* pFileName); //加载指定的Lua文件
bool CallFileFn(const char* pFunctionName, int nParam1, int nParam2); //执行指定Lua文件中的函数 private:
lua_State* m_pState; //这个是Lua的State对象指针,一个lua文件对应一个
}; void CLuaFn::Init()
{
if(NULL == m_pState)
{
m_pState = lua_open(); //返回一个lua对象指针
luaL_openlibs(m_pState); //加载所有可能用到的Lua基本库,比如加载lua的string库,io库,math库等等等等
}
} void CLuaFn:Close()
{
if(NULL != m_pState)
{
lua_close(m_pState); //关闭lua对象并释放指针
m_pState = NULL;
}
} /*
加载指定的Lua文件
这里要特别说明一下,因为Lua是脚本语言,加载lua文件本身的时候才会编译
所以在加载文件的时候尽量放在程序的初始化中,因为当你执行luaL_dofile()函数的时候,
Lua会启用语法分析器,去分析你的脚本语法是否符合Lua规则,如果你胡乱的传一个文件过去,
Lua就会告诉你文件语法错误,无法加载。如果你的Lua脚本很大,函数很多,语法分析器会比较耗时,
所以,加载的时候,尽量放在合适的地方,而且,对于一个Lua文件而言,
反复加载luaL_dofile()除了会使你的CPU变热没有任何意义
*/
bool CLuaFn:LoadLuaFile(const char* pFileName)
{
int nRet = ;
if(m_pState == NULL)
{
return false;
}
nRet = luaL_dofile(m_pState, pFileName);
if(nRet != )
{
//lua_tostring(m_pState,-1)-1取m_pState栈顶数据,即错误提示字符串 (-1相对栈顶位置,1相对栈底的绝对位置)
printf("CLuaFn::LoadLuaFile(%s) is file(%d)(%s)\n", pFileName, nRet, lua_tostring(m_pState,-));
return false;
} return true;
} //执行指定Lua文件中的函数
bool CLuaFn:CallFileFn(const char*pFunctionName, int nParam1, int nParam2)
{
int nRet = ;
if(m_pState == NULL)
{
return false;
}
lua_getglobal(m_pState, pFunctionName); //验证Lua函数是否在当前加载的Lua文件中,并把指针指向这个函数位置
lua_pushnumber(m_pState, nParam1); //压栈操作,把数据压入数据栈
lua_pushnumber(m_pState, nParam2);
}
lua和C++的交互(1)的更多相关文章
- Lua与C的交互
Lua 与 C 的交互 Lua是一个嵌入式的语言,它不仅可以是一个独立运行的程序,也可以是一个用来嵌入其它应用的程序库. C API是一个C代码与Lua进行交互的函数集,它由以下几部分构成: 1. ...
- cocos2d-x lua与c++简单交互
cocos2d-x lua与c++简单交互 version: cocos2d-x 3.6 本文讲述lua与c++的一些简单交互: lua通过消息方式调用c++无参接口 c++调用lua带参接口 1.通 ...
- Lua与C/C++交互问题
初学lua,遇到注册C/C++交互函数问题 在lua与C/C++交互时,C/C++的注册Lua函数若是一个有返回类型(压栈)而不是获取类型的时候应该返回1而不是返回0,否则会出现在Lua中值为nil( ...
- Lua与C++的交互
这篇文章说的挺详细的:Lua与C++的交互
- lua与C/C++交互概要
转 http://blog.csdn.net/wildfireli/article/details/22307635 Lua生来就是为了和C交互的,因此使用C扩展Lua或者将Lua嵌入到C当中都是非常 ...
- 通过lua栈了解lua与c的交互
lua是如何执行的 其中分析.执行部分都是c语言实现的. lua与c的关系 lua的虚拟机是用c语言实现的,换句话说一段lua指令最终在执行时都是当作c语言来执行的,lua的global表,函数调用栈 ...
- Lua脚本和C++交互(一)
现在,越来越多的C++服务器和客户端融入了脚本的支持,尤其在网游领域,脚本语言已经渗透到了方方面面,比如你可以在你的客户端增加一个脚本,这个脚本将会帮你在界面上显示新的数据,亦或帮你完成某些任务,亦或 ...
- Lua基本语法-lua与C#的交互(相当简单详细的例子)
lua脚本 与 C#的交互 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Lua And C# -- ...
- lua与c的交互(函数专用)
Lua与C的交互 Lua是一个嵌入式的语言,它不仅可以是一个独立运行的程序,也可以是一个用来嵌入其它应用的程序库. C API是一个C代码与Lua进行交互的函数集,它由以下几部分构成: 1. 读写L ...
随机推荐
- zabbix搭建并结合mikoomi插件监控hadoop集群
一.环境说明 系统: CentOS release 6.4 mysql 5.1.67 Apache/2.2.25 二.安装php 由于zabbix提供的frontends是php编写的,因此需要搭建l ...
- content-length与Transfer-Encoding: chunked的问题释疑
http返回头中content-length与Transfer-Encoding: chunked的问题释疑 先说说问题出现的背景: 公司服务器与手机客户端交互,客户端请求一个动态生成的XML文件,在 ...
- IT工具使用
linux 其他知识目录 常用快捷键总结 博客view code 删除,先删除,再清除格式
- python正则表达式re之compile函数解析
re正则表达式模块还包括一些有用的操作正则表达式的函数.下面主要介绍compile函数. 定义: compile(pattern[,flags] ) 根据包含正则表达式的字符串创建模式对象. 通过py ...
- ES6的新特性(6)——正则的扩展
正则的扩展 RegExp 构造函数 在 ES5 中,RegExp构造函数的参数有两种情况. 第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符(flag). var regex = ne ...
- Js 问题分析--js 影响页面性能
文档下载链接:http://pan.baidu.com/s/1i4Hci4d (失效请留言)
- BFC的表象认识
首先字面翻译,这三个字母分别代表什么,box,formatting, context,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用. 形象点就是说一种规范,规范什么呢?规范盒子内部 ...
- 用了这么多年的MCU,你知道哪些MCU原厂最牛?
单片机诞生于1971年,经历了SCM.MCU.SoC三大阶段.单片机由以前的1位.4位.8位.16位,发展到现在的32位甚至64位. 90年代后随着消费电子产品大发展,单片机技术得到了巨大提高,相继诞 ...
- Java连接池
- uc浏览器的用户体验
用户界面: 我认为,uc浏览器的用户界面还是很招人喜欢的,可以很容易让用户找到自己想看的网页.简单快捷. 记住用户的选择: uc在每次用户访问完网站之后都会记住用户访问的高频网站,以便下次用户可以更好 ...