LuaPlus上手指南
版權所有,轉載請註明出處,勿用於商業用途,謝謝!
作者: 大寶天天見
Blog: http://www.cppblog.com/singohgod
本人水平有限,有錯請指出,歡迎交流,共同進步!
國內關於Lua的資料實在是太少,為了尋找一個合適的Lua的C++封裝,真是如同大海撈針.在看了眾多資料後鎖定以下幾種:LuaBind ToLua++ LuaPlus.在選擇上頗有諷刺的味道,LuaBind的版本號還沒到1.0,加上網友頗有微詞,放棄.ToLua++本來有朋友推薦,但是怎麼都找不到下載,官網就是打不開,無賴放棄.就只有LuaPlus了,看到一些人的評價還行,於是決定就用它吧.
LuaPlus的資料就更少了,連怎麼配置怎麼除錯等什麼都沒有,只有沐楓大哥講解了語法方面的一篇文章.啊喲,怎麼搞呢,難道又只有硬著頭皮上了?(某偉人曾說過,但凡傑出的事都是硬著頭皮幹出來滴)
好了,言歸正傳,下面講講我的經驗吧:
如何編譯
1. 下載
首先到官方網站下載: http://www.luaplus.org/
下載這個: All source code: http://luaplus.org/LuaPlus51_Build1100.zip (我當前的版本,當然越新越好)
2. 剝離
解開下載包,開啟 \LuaPlus51_Build1100\Src\LuaPlus 裡面是全部原始檔,src下是lua的原始檔.這裡有個令人疑惑的地方,原始檔中帶了一些不需要的檔案,要剔除去,基本上需要以下這些檔案:
1) Lua庫檔案:
lapi.c lapi.h lauxlib.c lauxlib.h lbaselib.c lcode.c lcode.h ldblib.c ldebug.c ldebug.h ldo.c ldo.h ldump.c lfunc.c lfunc.h lgc.c lgc.h linit.c |
liolib.c llex.c llex.h llimits.h lmathlib.c lmem.c lmem.h loadlib.c lobject.c lobject.h lopcodes.c lopcodes.h loslib.c lparser.c lparser.h lstate.c lstate.h lstring.c |
lstring.h lstrlib.c ltable.c ltable.h ltablib.c ltm.c ltm.h lua.h luaconf.h lualib.h lundump.c lundump.h lvm.c lvm.h lzio.c lzio.h print.c |
2) LuaPlus標頭檔案:
auxiliar.h LuaAutoBlock.h LuaCall.h LuaFunction.h LuaHelper.h LuaHelper_Object.h LuaHelper_StackObject.h LuaLink.h LuaObject.h LuaObject.inl LuaPlus.h LuaPlusCD.h |
LuaPlusFunctions.h LuaPlusInternal.h LuaStackObject.h LuaStackObject.inl LuaStackTableIterator.h LuaState.h LuaState.inl LuaStateOutFile.h LuaTableIterator.h luathread.h pt.h srm.h |
3) LuaPlus原始檔
LuaCall.cpp LuaObject.cpp LuaPlus.cpp LuaPlusAddons.c LuaPlusFunctions.cpp LuaPlus_Libs.cpp LuaStackObject.cpp |
LuaStackTableIterator.cpp LuaState.cpp LuaStateOutFile.cpp LuaState_DumpObject.cpp LuaTableIterator.cpp lwstrlib.c |
3. 建立專案
然後你就可以在VS中建立一個新專案,靜態連結庫的:
分別把需要的檔案加進去,之後編譯,應該能通過了.
如何使用
接著講講如何在你的其他專案中使用LuaPlus.
1.必要的配置
你的專案可能是這樣的:
設定GameClient的依賴項是LuaPlusLib
#include "LuaPlus.h"
using namespace LuaPlus;
記得幹這事…
2.建立一個狀態
LuaStateOwner state;
今後的操作都圍繞這個state
3.執行指令碼
int iret = state->DoFile("test.lua");
返回值為0表示成功,否則不成功.
4.C++中獲取Lua指令碼的變數
假設你的test.lua中有:
health = 200;
通過下列方法就可以在C++中得到這個數值
int mytest = state->GetGlobal("health").GetInteger();
5.C++中呼叫Lua指令碼里的函式
假設你的test.lua中有:
function Add(x, y)
return x+y;
end
在C++中需要先宣告這個函式:
LuaFunction<float> Add = state->GetGlobal("Add");
這樣你就有了Add()這個函式,然後就可以像平常一樣使用它了:
float myret = Add(3.14f,5.25f);
6.Lua指令碼中呼叫C++函式
在讀取test.lua之前要先把C++函式註冊到Lua的執行時棧裡,這樣在執行lua指令碼的時候,才知道執行哪一個函式:
首先有函式:
int LS_PrintNumber(LuaState* state)
{
LuaStack args(state);
if (args[1].IsNumber()) {
printf("%f\n", args[1].GetNumber());
}
return 0;
}
然後註冊這個函式到Lua:
state->GetGlobals().Register("PrintNumber", LS_PrintNumber);
這樣就把LS_PrintNumber對映為Lua中可以使用的函式PrintNumber.
Test.lua指令碼中新增呼叫語句:
PrintNumber(30);
當state->DoFile("test.lua");執行的時候,就執行了C++中的這個函式.
總結
本文介紹了LuaPlus的基本配置方法和使用,希望對你有幫助.下一篇將介紹一些高階特性,如怎樣在VS中除錯LuaPlus的指令碼,以及對類的操作等.
如果還有任何疑問可以看看下面這個簡單的例子:
/Files/singohgod/LuaPlus_Test.rar
相關文章
- Elasticsearch上手指南Elasticsearch
- Docker 快速上手指南Docker
- LLaMA快速上手指南
- 『Ansible 上手指南』
- ColorEasyDuino上手指南UI
- React 教程:快速上手指南React
- Github Action 快速上手指南Github
- 『Ansible 上手指南:2』
- HMI-Board上手指南
- Vue入門指南(快速上手vue)Vue
- FusionServer uMate 簡單上手指南Server
- 5分鐘 Pipenv 上手指南
- Android BLE 快速上手指南Android
- vue3快速上手指南Vue
- 《Flutter快速上手指南》先導篇Flutter
- 給Android開發者Flutter上手指南AndroidFlutter
- 『No20: Golang 爬蟲上手指南』Golang爬蟲
- 超詳細的 Vagrant 上手指南
- win8系統上手指南
- 華為雲伺服器快速上手指南伺服器
- Eclipse快速上手指南之使用JUnitEclipse
- Maven快速上手使用指南的筆記Maven筆記
- 【實用】iOS開發者後臺快速上手指南iOS
- 深度學習框架新手快速上手指南深度學習框架
- Mac 觸控板增強BetterTouchTool 上手指南Mac
- 你玩轉win8上手指南系列
- kaixue.io: Kotlin 和 Jetpack 的上手指南AIKotlinJetpack
- Vue入門指南-06 Vue中的動畫(快速上手vue)Vue動畫
- Vue入門指南-07 Vue中的元件(快速上手vue)Vue元件
- Vue入門指南-01建立vue例項 (快速上手vue)Vue
- aspnetcore 應用 接入Keycloak快速上手指南NetCore
- Jetpack Compose 重磅更新!最全的新元件上手指南!Jetpack元件
- 【Flutter2.0 快速上手指南】 Flutter 空安全深入解析Flutter
- Vue入門指南-03 vue官方提供的指令 (快速上手vue)Vue
- TiDB HTAP 上手指南丨新增 TiFlash 副本的工作原理TiDB
- 最詳盡使用指南:超快上手Jupyter Notebook
- Mac 觸控板增強神器BetterTouchTool 上手指南,新手必備Mac
- Vue入門指南-05 Vue例項的生命週期(快速上手vue)Vue