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 ...
随机推荐
- OpenLDAP备份和恢复
OpenLDAP中数据备份一般分为二种: 1)通过slapcat 指令进行备份 2)通过phpLDAPadmin控制台进行备份 备份方式1: 1)slapcat -v -l openldap-back ...
- fail-fast 机制 思考
HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的. Iterator支持fail-fast机制,而Enum ...
- preg_replace 以及弃用的e
preg_replace (PHP 4, PHP 5) preg_replace — 执行一个正则表达式的搜索和替换 说明¶ mixed preg_replace ( mixed $pattern , ...
- Python Pygame (3) 界面显示
显示模式: 之前使display模块的set_mode()的方法用来指定界面的大小,并返回一个Surface对象. set_mode()的原型如下: display.set_mode(resoluti ...
- USACO 2.4.4 Bessie Come Home 回家(最短路)
Description 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只速度最快 ...
- PSP Daily——团队项目Alpha发布
视频展示:优酷视频链接.文案如下 PSP Daily软件NABCD分析: 1) N (Need 需求) PSP Daily 解决了用户(软件工程课上学生)记录例行报告.写每周PSP表格和统计的需求.潜 ...
- 【软工实践】第四次作业--爬虫结合WordCount
结对同学博客链接 本次作业博客链接 github项目地址 具体分工 我主要负责用python写爬虫部分,他负责C++部分 PSP表格 解题思路 代码的核心思路是利用爬虫,爬取论文网址,之后吧对应信息( ...
- Codeforces Beta Round #6 (Div. 2 Only) 单调队列
题目链接: http://codeforces.com/contest/6/problem/E E. Exposition time limit per test 1.5 secondsmemory ...
- Web-JSP表单字符验证
代码后续补上
- web移动端
h5:低版本(IE8及以下不支持H5标签,要引入html5shiv.js才能正常运行) 条件引入,只是针对PC端,移动端不存在这样的操作 <figure>:专门用来存放图片和相关介绍的 & ...