Lua 跟 C++ 的交互
Lua 和 C++ 是这样交互的
乱七八糟的前戏:
1. 到官网下载 Lua 文件 可參考 -> Lua 下载与配置
2. 设置环境 可參考 -> VS 配置Lua环境
交互过程有:
1. C++ 訪问 Lua 的变量
2. C++ 调用 Lua 的函数
3. Lua 訪问 C++ 的变量
4. Lua 訪问 C++ 的函数
No code say a j8
C++ 调用 Lua
#include <iostream>
#include <string> // 引入Lua必要的头文件,Version: Lua5.1.5
extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}; using namespace std; // C++ 调用 lua
int main()
{
//初始化全局L
lua_State *L = luaL_newstate(); //打开库
luaL_openlibs(L); //载入lua脚本文件
if (luaL_loadfile(L,"LuaFile\\lua.lua")) // lua.lua 的路径,这里使用相对路径
{
printf("file load error\n");
} lua_pcall(L,0,0,0); // 载入 Lua 文件 lua_getglobal(L, "l_str"); // get, 将L指向 lua文件里的函数 l_str lua_pcall(L,0,1,0); // 运行指针L指向的函数,将结果返回到栈顶, (0,1,0) 表示 (输入个数,输出个数,其它处理) string strVersion = luaL_checkstring(L,1); // 从栈顶获取元素
cout<<strVersion<<endl; lua_close(L); return 0;
} /*************************************
Lua.lua version = "Lua version: 5.1.5";
function l_str()
return version;
end; print("Load LuaFile Accomplish"); *************************************/
Lua 调用 C++
#include <iostream>
#include <string> // 引入Lua必要的头文件,Version: Lua5.1.5
extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}; using namespace std; // 将lua中的变量,通过这个函数打印出来
int c_Print(lua_State* L) // 返回值为压入栈中元素的个数
{
// 从參数列表中,获取元素
string strVersion = luaL_checkstring(L,1); cout<<strVersion<<endl; lua_pushstring(L, strVersion.c_str()); // 将 strVersion 压入栈。也能够不压 return 1; // 返回压入栈中元素的个数 } // Lua 调用 C++ 的函数
int main()
{
//初始化全局L
lua_State *L = luaL_newstate(); //打开库
luaL_openlibs(L); //载入lua脚本文件
if (luaL_loadfile(L,"LuaFile\\lua.lua")) // lua.lua 的路径,这里使用相对路径
{
printf("file load error\n");
} lua_pcall(L,0,0,0); // 载入 Lua 文件 lua_pushcfunction(L, c_Print); // 将C++函数push进来
lua_setglobal(L, "c_Print"); // 将C++函数进行注冊。这样lua文件就能识别到了。 lua_getglobal(L, "l_Print");
lua_pcall(L,0,0,0); // 调用lua 中的 l_Print 函数 lua_close(L); return 0;
} /*************************************
Lua.lua version = "Lua version: 5.1.5";
function l_Print()
c_Print(version);
end; print("Load LuaFile Accomplish"); *************************************/
执行结果:
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 ...
随机推荐
- Python学习日记之读取中文目录
unicode # -*- coding:utf-8 -*- import os import shutil ins="E:\\学习资料" dir=unicode(ins,'utf ...
- 关于微信小程序:scroll-view,backgroundTextStyle
踩过的坑mark下 1.滚动列表最好不要用scroll-view组件,这个组件有不少问题,比如触顶操作触发了,会连续好几次执行触发函数,得用一个开关变量和定时器配合来控制,一般情况下view组件就够用 ...
- 开发一款APP需要多少钱
移动互联网近几年发展尤为迅速,越来越多的企业也开始将目光聚集到了移动互联网,这意味着移动互联网时代到来,而移动APP应用是竞争的一个因素.在移动互联网时代,移动APP开发已经不再是什么新鲜事了,许多的 ...
- 了解Selenium与自动化测试第一天“云里雾里”
以前没有搭建过Selenium自动化功能测试环境,想象中就像QTP一样,集成IDE一般简单快捷. 昨天通过博客园的一篇博友日志,才开始大概认识到Selenium的工作方式与特征: 1.插件般与浏览器结 ...
- vue+vux+es6+webpack移动端常用配置步骤
1.创建项目(vue项目的流程就不多讲了)2.cnpm install vux --save3.在build/webpack.base.conf.js配置:const vuxLoader = requ ...
- 少啰嗦!一分钟带你读懂Java的NIO和经典IO的区别
1.引言 很多初涉网络编程的程序员,在研究Java NIO(即异步IO)和经典IO(也就是常说的阻塞式IO)的API时,很快就会发现一个问题:我什么时候应该使用经典IO,什么时候应该使用NIO? 在本 ...
- Python学习之LeetCode刷题之路——简单题【1、7、9】
1.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...
- 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误"
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误" One of the configured ...
- [Algorithm] 3. Digit Counts
Description Count the number of k's between 0 and n. k can be 0 - 9. Example if n = 12, k = 1 in [0, ...
- 自定义属性Attribute的运用
有时候需要一个枚举类,能够承载更多的信息,于是可以利用attribute这个特性. 首先编写自己业务需求类 [AttributeUsage(AttributeTargets.Field)] publi ...