亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

lua 基礎教程

2024-07-21 23:05:00
字體:
來源:轉載
供稿:網友

最近在看lua,覺得很有趣,發現沒有最新版本的例子,所以自己就別人的博客里弄了源碼,然后改成最新版本的lua C API.

關于lua非?;A的就不介紹了,咱們就從簡單的測試開始吧。

在此之前如果沒有搭好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();/*載入lua基本庫*/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*/ 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函數

話不多說,直接上代碼

#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;/************************************************************************///函數功能:調用lua函數//函數參數://     L lua虛擬機//     x//     y//函數返回://     sum//核心函數 lua_call()/*調用一個函數。要調用一個函數請遵循以下協議: 首先,要調用的函數應該被壓入堆棧; 接著,把需要傳遞給這個函數的參數按正序壓棧;這是指第一個參數首先壓棧。 最后調用一下 lua_call; nargs 是你壓入堆棧的參數個數。 當函數調用完畢后,所有的參數以及函數本身都會出棧。而函數的返回值這時則被壓入堆棧。 返回值的個數將被調整為 nresults 個, 除非 nresults 被設置成 LUA_MULTRET。在這種情況下,所有的返回值都被壓入堆棧中。 Lua 會保證返回值都放入??臻g中。函數返回值將按正序壓棧(第一個返回值首先壓棧), 因此在調用結束后,最后一個返回值將被放在棧頂。被調用函數內發生的錯誤將(通過 longjmp)一直上拋。*//************************************************************************/int luaadd(lua_State *L, int x, int y){int sum;/*通過名字獲取Lua函數*/lua_getglobal(L,"add");/*向棧中壓入第一個參數*/lua_pushnumber(L,x);/*向棧中壓入第二個參數*/lua_pushnumber(L,y);/*調用函數*/lua_call(L,2,1);/*得到結果把給定索引處的 Lua 值轉換為 lua_Integer 這樣一個有符號整數類型。這個 Lua 值必須是一個數字或是一個可以轉換為數字的字符串,否則,lua_tointeger 返回 0 。*/sum = (int)lua_tointeger(L,-1);/*從堆棧中彈出 n 個元素*///nlua_pop(L,1);return sum;}int main(){int sum;/*初始化lua虛擬機*/lua_State *L = luaL_newstate();/*載入lua基本庫*/luaL_openlibs(L);/*載入腳本*/luaL_dofile(L,"./script/test.lua");/*調用lua函數*/sum = luaadd(L,10,15);/*顯示結果*/cout<<"The sum = "<<sum<<endl;/*清除lua虛擬機*/lua_close(L);/*顯示結果并暫停*/cout<<"Press enter to exit…"<<endl;getchar();return 0;}

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虛擬機*/lua_State *L = luaL_newstate();/*打開lua基本庫*/luaL_openlibs(L);/*注冊函數*/lua_register(L,"average",average);/*運行腳本*/luaL_dofile(L,"./script/avg.lua");/*清除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();

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲黄一区二区| 欧美高清不卡在线| 68精品久久久久久欧美| 亚洲激情电影中文字幕| 成人免费视频网| 亚洲深夜福利视频| 日韩欧美a级成人黄色| 国产精品久久av| 国产一区欧美二区三区| 最新亚洲国产精品| 97精品在线视频| 国产精品视频自拍| 午夜免费日韩视频| 人人爽久久涩噜噜噜网站| 美女精品久久久| 国产免费成人av| 精品视频在线播放免| 日韩av成人在线观看| 久久男人av资源网站| 亚洲国产精品久久久久秋霞不卡| 热门国产精品亚洲第一区在线| 欧美www视频在线观看| 国产精品免费视频xxxx| 久久免费视频在线| 亚洲精品一区av在线播放| 久久综合电影一区| 国产一区二区三区在线免费观看| 国产精品999| xxxx欧美18另类的高清| 国产精品男女猛烈高潮激情| 国产一区二区三区视频在线观看| 欧美日韩国产第一页| 欧美激情aaaa| 久久亚洲精品中文字幕冲田杏梨| 精品在线观看国产| 日韩精品福利在线| 一区二区三区高清国产| 欧美xxxx做受欧美.88| 日韩二区三区在线| 91性高湖久久久久久久久_久久99| 久久69精品久久久久久国产越南| 午夜精品久久久久久99热软件| 久久精品成人欧美大片| 91极品女神在线| 国产精品影院在线观看| 亚洲永久在线观看| 久久久久在线观看| 日韩精品在线影院| 欧美日韩一区二区免费视频| 欧美裸体男粗大视频在线观看| 国产精品视频男人的天堂| 日韩高清人体午夜| 欧洲永久精品大片ww免费漫画| 亚洲成成品网站| 国产偷国产偷亚洲清高网站| 亚洲精品欧美一区二区三区| 精品国偷自产在线视频| 中文字幕视频在线免费欧美日韩综合在线看| 精品人伦一区二区三区蜜桃网站| 欧美午夜久久久| 美女福利视频一区| 国产精品入口尤物| 欧美专区福利在线| 日韩高清不卡av| 欧美在线免费视频| 午夜免费在线观看精品视频| 久久久91精品国产一区不卡| 久久香蕉精品香蕉| 日韩av最新在线| 91免费综合在线| 国产日韩欧美在线看| 孩xxxx性bbbb欧美| 国产999在线观看| 国产综合久久久久久| 69久久夜色精品国产69| 国产suv精品一区二区三区88区| 91精品视频在线看| 国产精品视频不卡| 久久亚洲精品中文字幕冲田杏梨| 26uuu亚洲国产精品| 亚洲毛片一区二区| 亚洲欧美国内爽妇网| 一区二区三区www| 国产日韩精品入口| 日韩一区二区三区在线播放| 日韩在线免费观看视频| 丁香五六月婷婷久久激情| 中文字幕精品国产| 国产丝袜高跟一区| 日韩美女激情视频| 亚洲欧美综合图区| 欧美成人黄色小视频| 色综合视频网站| 久久精品视频在线播放| 精品免费在线观看| 亚洲精品视频二区| 国产精品久久久久久久久男| 国产精品专区一| 一区二区三区在线播放欧美| 亚洲成人黄色网| 亚洲色图17p| 久久久国产视频| 久久精品国产视频| 久久韩剧网电视剧| 国产日韩av高清| 国产成人亚洲精品| 成人羞羞国产免费| 欧美成人激情在线| 成人h视频在线观看播放| 成人在线视频网| 国产精品爽爽爽| 亚洲已满18点击进入在线看片| 国产精品久久国产精品99gif| 久久成人精品电影| 17婷婷久久www| 亚洲午夜色婷婷在线| 欧美日在线观看| 国产suv精品一区二区| 精品久久久香蕉免费精品视频| 欧美精品免费播放| 亚洲国产精品yw在线观看| 国产日韩精品综合网站| 欧美大全免费观看电视剧大泉洋| 97在线日本国产| 色综合久久天天综线观看| 精品成人69xx.xyz| 亚洲春色另类小说| 最近中文字幕日韩精品| 欧美丰满少妇xxxx| 91高清视频免费| 亚洲综合在线中文字幕| 亚洲色图校园春色| 日韩高清a**址| 欧美国产第二页| 欧美色视频日本高清在线观看| 欧美精品videos另类日本| 另类少妇人与禽zozz0性伦| 国产精自产拍久久久久久蜜| 国产一区二区激情| 国产一区欧美二区三区| 久久免费视频网| 91性高湖久久久久久久久_久久99| 国产精品久久久久久久久久ktv| 欧美极品少妇xxxxⅹ免费视频| 国产一区二区免费| 欧美xxxx18性欧美| 日韩精品极品毛片系列视频| 国产精品久久久久久久电影| 亚洲午夜女主播在线直播| 欧美日韩国产成人在线观看| 亚洲精品久久久久久久久久久久久| 久久频这里精品99香蕉| 亚洲一区二区国产| 91在线高清视频| 91精品国产91久久久久福利| 欧美激情综合亚洲一二区| 国产在线观看精品| 91精品国产乱码久久久久久蜜臀| 国产精品一区二区三| 中文字幕亚洲欧美日韩在线不卡| 国产精品福利久久久| 日韩精品视频免费在线观看| 久久久久久久久综合| 国产日韩精品视频|