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 ...
随机推荐
- Object.assign() 对象的扩展
object.assign()方法用于对象的合并,将源对象的(source)的所有的可枚举属性,复制到目标对象(target) var target = {a:1}; var source1={b:2 ...
- Java反射机制实战——字段篇
首先,我们来认识几个类. Class(java.lang.Class) Class对象是一个特殊对象,每一个类都有一个Class对象,用来创建该类的“常规”对象.可以通过对象的getClass()方法 ...
- HDU_1143_tri tiling
Tri Tiling Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 并发编程学习笔记(9)----AQS的共享模式源码分析及CountDownLatch使用及原理
1. AQS共享模式 前面已经说过了AQS的原理及独享模式的源码分析,今天就来学习共享模式下的AQS的几个接口的源码. 首先还是从顶级接口acquireShared()方法入手: public fin ...
- CAD使用SetxDataLong写数据(网页版)
主要用到函数说明: MxDrawEntity::SetxDataLong 写一个long扩展数据,详细说明如下: 参数 说明 [in] BSTR val 字符串值 szAppName 扩展数据名称 n ...
- vue组件---组件注册
(1)组件名 在注册一个组件的时候,我们始终需要给它一个名字.比如在全局注册的时候我们已经看到了: Vue.component('my-component-name', { /* ... */ }) ...
- 【转】上传并解析excel
[转载自]http://blog.csdn.net/u011563331/article/details/51322523 通过解析excel,将数据存储到数据库中.现在将方法保存下来. 使用的是ap ...
- The following packages have unmet dependencies:
root@ubuntu:~# apt-get install open-iscsiReading package lists... DoneBuilding dependency treeReadin ...
- 记一些关于acm的小知识(自用,粗糙,勿点呀)
#define INF 0x7ffffff,定义一个很大的数
- 10JDBC、CURD、XML、XPath
10JDBC.CURD.XML.XPath-2018/07/20 1.JDBC JDBC:java database connectivity JDBC与数据库驱动的关系:接口与实现的关系. JDBC ...