时间:2021-05-22
最近在看lua,觉得很有趣,发现没有最新版本的例子,所以自己就别人的博客里弄了源码,然后改成最新版本的lua C API.
关于lua非常基础的就不介绍了,咱们就从简单的测试开始吧。
在此之前如果没有搭好lua在win32下的环境,请看
1.C/C++执行lua脚本
我只是用改用了最新的lua的C API。不多说,直接上代码
#include <iostream>#include <stdlib.h>#include <stdio.h>#include <string.h>extern "C"{#include "lua.h"#include "lualib.h"#include "lauxlib.h"};using namespace std;int main(){lua_State *pLuaState = luaL_newstate();luaL_openlibs(pLuaState);//luaopen_base(pLuaState);//luaopen_io(pLuaState); //替换老版本的lua_iolibopen(pLuaState);//luaopen_string(pLuaState); //替换老版本的lua_strlibopen(pLuaState);//luaopen_math(pLuaState); //替换老版本的lua_mathlibopen(pLuaState);//luaopen_debug(pLuaState); //替换老版本的lua_dblibopen(pLuaState);luaL_dofile(pLuaState,"./script/hw.lua"); lua_close(pLuaState);cout<<"Press enter to exit…"<<endl;getchar();return 0;}hw.lua的源码:
print("Hello Word!");这个例子只是简单的执行了一个lua脚本。
其中:lua_newstate是核心函数,要求提供内存分配函数,luaL_newstate是辅助库函数,采用默认的内存分配函数。lua_open是5.0时代的产物,5.1是luaL_newstate的宏,5.2里面已经没有了。
2.C/C++调用lua函数
话不多说,直接上代码
test.lua代码为:
function add(x,y)return x + y;end其中关于lua的堆栈问题,目前我还没有了解,希望大家多多指教。
3.lua调用C/C++函数
代码为:
#include <iostream>#include <stdlib.h>#include <stdio.h>#include <string.h>extern "C"{#include "lua.h"#include "lualib.h"#include "lauxlib.h"};using namespace std;static int average(lua_State *L){int n = lua_gettop(L);double sum = 0;int i;for (i = 1; i <= n; i++){sum += lua_tonumber(L,i);//cout<<sum<<endl;}//cout<<"fffffff"<<endl;lua_pushnumber(L,sum/n);lua_pushnumber(L,sum);return 2;}int main(){lua_State *L = luaL_newstate();luaL_openlibs(L);lua_register(L,"average",average);luaL_dofile(L,"./script/avg.lua");lua_close(L);cout<<"Press enter to exit…"<<endl;getchar();return 0;}avg.lua源码为:
function main()local avg,sum = average(2,2,2,2,2);print("The avg is",avg);print("The sum is", sum);endmain();声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
赋值语句注释,单行用(--)来表示;多行用(--[[...]])来标示;定义,lua中没有定义(申明数据类型),它是通过赋值来确定其数据类型的。赋值,是改变一个
表复制代码代码如下:a={}b={x=1,["hello,"]="world!"}a.astring="ni,hao!"a[1]=100a["atable"]=
基础教程介绍了基本概念,特别是对象和类。进阶教程对基础教程的进一步拓展,说明Python的细节。希望在进阶教程之后,你对Python有一个更全面的认识。之前我们
前言在学习SQL2012基础教程过程中会时不时穿插其他内容来进行讲解,相信看过SQLServer2012T-SQL基础教程的童鞋知道前面写的所有内容并非都是摘抄
本文研究的主要是PythonFlask基础教程,具体介绍如下。安装:pipinstallflask即可一个简单的FlaskfromflaskimportFlas