lua与c的交互(运用)
(1)lua程序
(2)C++程序(头文件)
extern "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文件对应一个
};
(3)C++程序(.cpp文件)
#include "CLuaFn.h"
CLuaFn::CLuaFn(void){m_pState = NULL;}; //这句干嘛
CLuaFn::~CLuaFn(void){};
//初始化函数void CLuaFn::Init()
{
if (NULL == m_pState)
{
m_pState = lua_open(); //返回一个lua对象指针
luaL_openlibs(m_pState); //加载了所有你可能用到的Lua基本库 }
}
//关闭Lua对象并释放资源void CLuaFn::Close()
{
if(NULL != m_pState)
{
lua_close(m_pState);
m_pState = NULL;
}
}
bool CLuaFn::LoadLuaFile(const char* pFileName)
{
int nRet = 0;
if (NULL == m_pState)
{
printf("[CLuaFn::LoadLuaFile]m_pState is NULL./n");
return false;
}
//加载文件的时候尽量放在程序的初始化中
nRet = luaL_dofile(m_pState, pFileName);
if (nRet != 0)
{
printf("[CLuaFn::LoadLuaFile]luaL_loadfile(%s) is file(%d)(%s)./n", pFileName, nRet, lua_tostring(m_pState, -1));
return false;
}
return true;
}
bool CLuaFn::CallFileFn(const char* pFunctionName, int nParam1, int nParam2)
{
int nRet = 0;
if (NULL == m_pState)
{
printf("[CLuaFn::CallFileFn]m_pState is NULL./n");
return false;
}
//验证你的Lua函数是否在你当前加载的Lua文件中,并把指针指向这个函数位置 lua_getglobal(m_pState, pFunctionName);
// 压栈(顺序:从左到右的参数):第一个参数 lua_pushnumber(m_pState, nParam1);
// 压栈:第二个参数 lua_pushnumber(m_pState, nParam2);
//执行这个函数,2是输入参数的个数,1是返回值的个数
nRet = lua_pcall(m_pState, 2, 1, 0);
if (nRet != 0)
{
printf("[CLuaFn::CallFileFn]call function(%s) error(%d)./n", pFunctionName, nRet);
return false;
}
if (lua_isnumber(m_pState, -1) == 1)
{
int nSum = lua_tonumber(m_pState, -1);
printf("[CLuaFn::CallFileFn]Sum = %d./n", nSum);
}
return true;
}
(4)C++程序(main文件)
#include "CLuaFn.h"int main(int argc, char* argv[])
{
CLuaFn LuaFn;
LuaFn.Init();
LuaFn.LoadLuaFile("Sample.lua");
LuaFn.CallFileFn("func_Add", 11, 12);
getchar();
return 0;
}
注:程序中的注释已经很详尽,这里不在对代码进行解释。下载安装lua之后,在vs2010中还要引入相应的库。截图如下:
lua与c的交互(运用)的更多相关文章
- 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++的交互(1)
/* 以前听的一个故事,当年Java的创造者讲课的时候,一开始先拿一个简单的不能简单的小例子, 不断的扩展,最后成为一个复杂而完美的程序. 一个重要之重要的概念,就是栈.Lua与别的语言交互以及交换数 ...
- lua与c的交互(函数专用)
Lua与C的交互 Lua是一个嵌入式的语言,它不仅可以是一个独立运行的程序,也可以是一个用来嵌入其它应用的程序库. C API是一个C代码与Lua进行交互的函数集,它由以下几部分构成: 1. 读写L ...
随机推荐
- 使用Pillow(PIL)库实现中文字符画
上班摸鱼写的,不多说了,直接上脚本 #coding=utf-8 from PIL import Image from PIL import ImageDraw from PIL import Imag ...
- 火车购票问题(16年ccf)
火车购票问题(16年ccf) 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排5个座位.为方便起见,我们用1到100来给所有的座位编号,第一 ...
- Hibernate3核心API-SessionFactory接口
Configuration对象根据当前的配置信息生成 SessionFactory 对象.SessionFactory 对象一旦构造完毕,即被赋予特定的配置信息(SessionFactory 对象中保 ...
- 14 statefulset (sts)控制器
statefulset (sts)控制器 可以用于部署有状态的服务,比如说redis,mysql ,zk等等... 1. 稳定且唯一的网络标志符:2. 稳定且持久的存储3. 有序,平滑地部署和扩展:4 ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-4.动态Sql语句Mybaties SqlProvider
笔记 4.动态Sql语句Mybaties SqlProvider 简介:讲解什么是动态sql,及使用 1. @UpdateProvider(type=VideoSqlP ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_4-01 常用的服务间调用方式讲解
笔记 第四章 服务消费者ribbon和feign实战和注册中心高可用 1.常用的服务间调用方式讲解 简介:讲解常用的服务间的调用方式 RPC: 远程过程调用,像调用本地 ...
- Python-sympy科学计算与数据处理(方程,微分,微分方程,积分)
方程 a,b,c,x = symbols("a b c x") my_eq = Eq(a*x**2+b*x+c,0) solve(my_eq,x) Out[12]: [(-b + ...
- document.documentElement.clientHeight 和 document.body.clientHeight
document.documentElement.clientHeight 和 document.body.clientHeight 介绍 在进行一些网页效果处理的时候,经常碰到document.do ...
- DRF视图-基类
2个视图基类 REST framework 提供了众多的通用视图基类与扩展类,以简化视图的编写. 为了区分上面请求和响应的代码,我们再次创建一个新的子应用: python manage.py star ...
- 爬虫实现51job谁看过我的简历多条记录功能
默认情况下51job只能看到最近一条记录,查看更多记录需要付费. 本文利用爬虫定时抓取记录,并追加写入到文本的方式获取完整的记录信息. import requests from bs4 import ...