简单的C中通过LUA API访问LUA脚本变量
1.简介
这一节介绍一些关于栈操作、数据类型判断的LUA API,可以使用这些函数获得脚本中的变量值。
2.步骤
编写 test01.lua 脚本,在VS2003中创建控制台C++程序并正确配置,执行查看结果,修改test02.lua脚本后查看执行结果
3.测试脚本
以下是用来测试的lua脚本
function plustwo(x)
local a = 2;
return x+a;
end;
rows = 6;
cols = plustwo(rows);
上面的脚本定义了一个函数、两个全局变量(LUA脚本变量默认是全局的)。之后的C++程序中,我们将通过栈操作获得这两个变量 rows, cols
4.控制台程序
#include <iostream>
extern "C"
{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}
using namespace std;
int main(int argc, char* argv[])
{
cout << "01_Read_Stack" << endl;
/**//* Create a LUA VMachine */
lua_State *L = lua_open();
luaopen_base(L);
luaopen_table(L);
luaL_openlibs(L);
luaopen_string(L);
luaopen_math(L);
int iError;
iError = luaL_loadfile(L, "../test01.lua");
if (iError)
{
cout << "Load script FAILED!" << lua_tostring(L, -1)<< endl;
lua_close(L);
return 1;
}
iError = lua_pcall(L, 0, 0, 0);
if (iError)
{
cout << "pcall FAILED"<< lua_tostring(L, -1)<< iError<< endl;
lua_close(L);
return 1;
}
lua_getglobal(L, "rows");
lua_getglobal(L, "cols");
if (!lua_isnumber(L, -2))
{
cout << "[rows] is not a number" << endl;
lua_close(L);
return 1;
}
if (!lua_isnumber(L, -1))
{
cout << "[cols] is not a number" << endl;
lua_close(L);
return 1;
}
cout << "[rows]"
<< static_cast<int> (lua_tonumber(L, -2))
<< "[cols]"
<< static_cast<int> (lua_tonumber(L, -1))
<< endl;
lua_pop(L,2);
lua_close(L);
return 0;
}
出处:http://kudy.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库