/*
以前听的一个故事,当年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)的更多相关文章

  1. Lua与C的交互

    Lua 与 C 的交互 Lua是一个嵌入式的语言,它不仅可以是一个独立运行的程序,也可以是一个用来嵌入其它应用的程序库. C API是一个C代码与Lua进行交互的函数集,它由以下几部分构成: 1.  ...

  2. cocos2d-x lua与c++简单交互

    cocos2d-x lua与c++简单交互 version: cocos2d-x 3.6 本文讲述lua与c++的一些简单交互: lua通过消息方式调用c++无参接口 c++调用lua带参接口 1.通 ...

  3. Lua与C/C++交互问题

    初学lua,遇到注册C/C++交互函数问题 在lua与C/C++交互时,C/C++的注册Lua函数若是一个有返回类型(压栈)而不是获取类型的时候应该返回1而不是返回0,否则会出现在Lua中值为nil( ...

  4. Lua与C++的交互

    这篇文章说的挺详细的:Lua与C++的交互

  5. lua与C/C++交互概要

    转 http://blog.csdn.net/wildfireli/article/details/22307635 Lua生来就是为了和C交互的,因此使用C扩展Lua或者将Lua嵌入到C当中都是非常 ...

  6. 通过lua栈了解lua与c的交互

    lua是如何执行的 其中分析.执行部分都是c语言实现的. lua与c的关系 lua的虚拟机是用c语言实现的,换句话说一段lua指令最终在执行时都是当作c语言来执行的,lua的global表,函数调用栈 ...

  7. Lua脚本和C++交互(一)

    现在,越来越多的C++服务器和客户端融入了脚本的支持,尤其在网游领域,脚本语言已经渗透到了方方面面,比如你可以在你的客户端增加一个脚本,这个脚本将会帮你在界面上显示新的数据,亦或帮你完成某些任务,亦或 ...

  8. Lua基本语法-lua与C#的交互(相当简单详细的例子)

    lua脚本 与 C#的交互 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Lua And C# -- ...

  9. lua与c的交互(函数专用)

    Lua与C的交互 Lua是一个嵌入式的语言,它不仅可以是一个独立运行的程序,也可以是一个用来嵌入其它应用的程序库. C API是一个C代码与Lua进行交互的函数集,它由以下几部分构成: 1.  读写L ...

随机推荐

  1. day05 字典 dict

    今日内容: 字典 成对的保存数据. 以key:value的形式保存 用{}表示,每一项内容都是key:value, 每项数据之间用逗号隔开 字典中的key是不能重复的. 存储是依靠着key来计算的. ...

  2. 第一次ScrumMeeting博客:团队任务分解

    团队任务分解 1. 主要任务 Alpha阶段结束后,我们要实现一个较为简陋的用户系统,并实现资源的上传和下载功能,完成"贡献点"相关内容并进行用户行为观察,以便Beta阶段完善.除 ...

  3. Python20-Day01

    简述编译型与解释型语言的区别,且分别列出你知道的哪些语言属于编译型,哪些属于解释 编译型语言是一种以编译器来实现的编程语言,优缺点:执行速度快,调试麻烦 编译型语言:Java,Go,C,C++ 解释性 ...

  4. 面对30页左右的运放数据手册datasheet,你需要知道如何看懂

    1.输入失调电压(Input Offset Voltage) VOS    若将运放的两个输入端接地,理想运放输出为零,但实际运放输出不为零.此时,用输出电压除以增益得到的等效输入电压称为输入失调电压 ...

  5. Scrum立会报告+燃尽图(十一月二十六日总第三十四次):上传β阶段展示视频

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2413 项目地址:https://git.coding.net/zhang ...

  6. “Hello World!”团队第三周召开的第三次会议

    今天是我们团队“Hello World!”团队第三周召开的第三次会议.博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.todo list 六.会议照片 七.燃尽图 八.代码地址 ...

  7. python 读取blob

    for num in range(76802): # if num == 0: # c[num] = imagedata[0:4] # d[num] = struct.unpack('i', c[nu ...

  8. Beta版软件使用说明

    1引言 1 .1编写目的 编写本使用说明的目的是充分叙述本软件所能实现的功能及其运行环境,以便使用者了解本软件的使用范围和使用方法,并为软件的维护和更新提供必要的信息. 1 .2参考资料 1 .3术语 ...

  9. texbbox,combobox设置属性

    --输入框 $("#xx").textbox('setValue','value');  //设置输入框的值 $('#xx').textbox('textbox').attr('r ...

  10. Kotlin在处理GET和POST请求的数据问题

    1.网络请求获取到的数据流处理 java写法 BufferedReader br = new BufferedReader(new InputStreamReader(in, "utf-8& ...