C/C++内嵌简本语言

编程入门 行业动态 更新时间:2024-10-27 19:29:04

C/C++内嵌<a href=https://www.elefans.com/category/jswz/34/160348.html style=简本语言"/>

C/C++内嵌简本语言

一、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,...),从下往上是(0,1,2,3)。

// LuaScriptParse.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <iostream>
#include <string>extern "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 name="L">lua虚拟机</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);
}

更多推荐

C/C++内嵌简本语言

本文发布于:2023-11-15 02:57:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1592554.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:简本   内嵌   语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!