苏州免费推广的网站,广东省广州市番禺区南村镇,网站备案必须做前置审批吗,星外网站开发一、LUA简介
Lua [1] 是一个小巧的脚本语言。Lua脚本可以很容易的被C/C 代码调用#xff0c;也可以反过来调用C/C的函数#xff0c;这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本#xff0c;也可以作为普通的配置文件#xff0c;代替XML,ini等文件格式#…一、LUA简介
Lua [1] 是一个小巧的脚本语言。Lua脚本可以很容易的被C/C 代码调用也可以反过来调用C/C的函数这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本也可以作为普通的配置文件代替XML,ini等文件格式并且更容易理解和维护。 [2] Lua由标准C编写而成代码简洁优美几乎在所有操作系统和平台上都可以编译运行。 [2] 一个完整的Lua解释器不过200k在所有脚本引擎中Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。 [2]
二、内嵌LUA
LUA的核心是lua_State结构体。他是lua脚本或者解析器与C语言数据传输的媒介。lus_State可以理解为是一个栈。数据的传入传出都是通过栈来操作。栈从上往下索引是-1-2...,从下往上是0123。
// LuaScriptParse.cpp : 此文件包含 main 函数。程序执行将在此处开始并结束。
//#include iostream
#include stringextern C {
#include Lua542/include/lua.h
#include Lua542/include/lualib.h
#include Lua542/include/lauxlib.h
}#pragma comment(lib,Lua542/lua54.lib)bool CheckLua(lua_State* L, int r) {if (r!LUA_OK) {std::string errormsg lua_tostring(L,-1);std::cout errormsg std::endl;return false;}return true;
}/// summary
/// 被注册到LUA的函数
/// /summary
/// param nameLlua虚拟机/param
/// returns传入参数个数/returns
int lua_HostFunction(lua_State* L) {float a (float)lua_tonumber(L, 1);float b (float)lua_tonumber(L, 2);std::cout [C] lua_HostFunction( a , b ) std::endl;float c a * b;lua_pushnumber(L, c);return 1;
}int main()
{std::string cmd a 7 11 math.sin(23.7);//创建虚拟机状态栈lua_State* L luaL_newstate();luaL_openlibs(L);if (CheckLua(L, luaL_dostring(L, cmd.c_str()))) {//获取全局变量结果放在栈顶lua_getglobal(L, a);//判断栈顶数据是否是个数字if (lua_isnumber(L,-1)) {float a_in_cpp (float)lua_tonumber(L,-1);std::cout a_in_cpp a_in_cpp std::endl;}}//注册一个函数lua_register(L,HostFunction, lua_HostFunction);//加载文件if (CheckLua(L, luaL_dofile(L, ./Example.lua))) {//获取一个全局变量lua_getglobal(L, DoAThing);//判断栈顶是否是函数if (lua_isfunction(L,-1)) {//压入参数lua_pushnumber(L,5.0f);lua_pushnumber(L, 6.0f);//调用函数指明输入、输出参数个数错误相应if (CheckLua(L,lua_pcall(L,2,1,0))) {std::cout [C] Called in lua DoAthing(5.0f,6.0f),got (float)lua_tonumber(L, -1) std::endl;}}}//关闭虚拟机lua_close(L);
}