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++ 的交互的更多相关文章

  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++的交互(1)

    /* 以前听的一个故事,当年Java的创造者讲课的时候,一开始先拿一个简单的不能简单的小例子, 不断的扩展,最后成为一个复杂而完美的程序. 一个重要之重要的概念,就是栈.Lua与别的语言交互以及交换数 ...

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

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

随机推荐

  1. 【PostgreSQL-9.6.3】LOG: unrecognized configuration parameter "dynamic_shared_memory_type"

    报错如下: 输入如下命令启动PG数据库时,报错: [postgres@drz ~]$ pg_ctl -D /opt/postgresql/data/ start server starting FAT ...

  2. npm换淘宝源 yarn换淘宝源

    查询初始的源 npm get registry > https://registry.npmjs.org/ 设置淘宝源 npm config set registry http://regist ...

  3. HDU_1021_费布拉切变形

    Fibonacci Again Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  4. day19-常用模块IV(re、typing)

    目录 re模块 typing模块 爬取音频 re模块 用来从字符串(文本)中查找特定的东西 1.元字符:有特殊意义的字符 ^ 从开头匹配 import re a = re.findall('^abc' ...

  5. java Object类中方法介绍

  6. 带返回值的线程Callable

  7. css--小白入门篇6(终)

    一.相对定位 定位有三种,分别是相对定位.绝对定位.固定定位. 相对定位: 1 position:relative; 绝对定位: 1 position:absolute; 固定定位: 1 positi ...

  8. python面向对象的特点,类定义等,私有属性、公有属性、成员属性

    引子:类的对象在内存中的表示def dog(name,dog_type): def bark(d): print(d,'wang wang wang ...') data = { 'name':nam ...

  9. python环境配置以及基本知识

    python---一种解释型语言(脚本语言),具有代码简洁.入门简单.开发效率高的优点.当然不可避免的有着暴露源码.执行效率低的缺点,但毕竟瑕不掩瑜,在数据是无比宝贵的财富的当下,无疑是一门优秀的编成 ...

  10. Quadtrees(四分树)

    uva 297 Quadtrees Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Subm ...