一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Lua - Lua教程(一):在C++中嵌入Lua腳本

Lua教程(一):在C++中嵌入Lua腳本

2020-04-10 14:47腳本之家 Lua

這篇文章主要介紹了Lua教程(一):在C++中嵌入Lua腳本,本文在MAC環(huán)境中開發(fā),同時探討了IOS項目集成Lua、Android項目集成Lua等內(nèi)容,需要的朋友可以參考下

本系列教程主要介紹如何在C/C++程序里面嵌入Lua腳本,我打算從以下幾個方面來介紹:

1.如何在C/C++里面嵌入Lua腳本

2.Lua訪問C/C++數(shù)據(jù)結(jié)構(gòu)(這里面要介紹類,結(jié)構(gòu)體,函數(shù),變量,枚舉等數(shù)據(jù)類型在lua里面如何訪問)

3.C/C++訪問Lua的數(shù)據(jù),主要是基本數(shù)據(jù)類型,函數(shù)和Table

4.Cocos2D-X里面的Lua綁定(含自動綁定與手動綁定)

5.Cocos2D-x里面Lua和C/C++相互調(diào)用

6.Cocos2D-x里面Lua和Java相互調(diào)用

7.Cocos2D-x里面Lua和Objective-C相互調(diào)用

本系列教程不會過多地介紹Lua的基本語法,關于Lua基本語法的學習,推薦《Programming In Lua》。 如有紕漏,歡迎指出,謝謝。

另外,關于更新時間,每周一篇,定期或者不定期,呵呵。

Mac項目集成Lua

準備工作

首先,新建一個控制臺應用程序。 打開Xcode,New->Project->OSX->Command Line Tool,取名為Lesson01如下圖所示:

Lua教程(一):在C++中嵌入Lua腳本

接下來,我們需要下載lua5.2.3.下載完后,解壓縮,然后cd到剛剛解壓縮的路徑下面,輸入make macosx,這樣便可以生成Mac下面的lib文件。

接下來把剛剛解壓縮的文件夾拷貝到你新建的工程下面,然后設置include路徑和library路徑。(注意,這里是不需要把頭文件添加到Xcode里面的,只要指定include路徑,編譯的時候,編譯器會自動去找的。)

Lua教程(一):在C++中嵌入Lua腳本

因為我的Lua文件夾的路徑是:xxxx/Lesson01/lua-5.2.3,所以,我把search path和library path分別設置為:

 

復制代碼 代碼如下:

//search path
$(SRCROOT)/Lesson01/lua-5.2.3/src/
//library path
$(PROJECT_DIR)/Lesson01

 

下面是我的工程與lua之間的目錄結(jié)構(gòu),liblua.a文件是從src里面拷貝出來的。(前面我們使用make macosx生成出來的)

Lua教程(一):在C++中嵌入Lua腳本

注意:如果直接添加lua的所有源碼,則會編譯報錯。因為lua.c里面也有一個main函數(shù)。這個main函數(shù)是用來生成可執(zhí)行程序的。 另外,如果是添加其它第三方的庫,也可以參考這個方法,添加search path和library path

C++調(diào)用Lua文件

首先,打開main.cpp,并包含以下頭文件:

復制代碼 代碼如下:

#include "lua.hpp"

 

如果此時編譯不報錯,則說明你之前設置的search path是正確的,如果報錯,請自行調(diào)整search path。

這里面的lua.hpp的內(nèi)容如下:

復制代碼 代碼如下:

extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}

 

這才是大多數(shù)Lua教程里的代碼嘛。然后在main函數(shù)里面添加以下內(nèi)容:

 

復制代碼 代碼如下:

/1. 初始化Lua虛擬機
lua_State *lua_state;
lua_state = luaL_newstate();
//2.設置待注冊的Lua標準庫,這個庫是給你的Lua腳本用的
//因為接下來我們只想在Lua腳本里面輸出hello world,所以只引入基本庫就可以了
static const luaL_Reg lualibs[] =
{
    { "base", luaopen_base },
    { NULL, NULL}
};
//3.注冊Lua標準庫并清空棧
const luaL_Reg *lib = lualibs;
for(; lib->func != NULL; lib++)
{
    luaL_requiref(lua_state, lib->name, lib->func, 1);
    lua_pop(lua_state, 1);
}
//4、運行hello.lua腳本
luaL_dofile(lua_state, "hello.lua");
//5. 關閉Lua虛擬機
lua_close(lua_state);

 

新建Lua文件

選擇New->File->Other,然后命名為hello.lua, 以下是hello.lua里面的內(nèi)容:

復制代碼 代碼如下:

print "Hello World"

 

編譯并運行

此時編譯并運行,這時可能看不到控制臺輸出”Hello World”。因為你的Lua腳本沒有拷貝到程序里面去,我們需要再設置一下。如下圖所示: (注意:subpath要清空,copy only when installing去掉打勾)

Lua教程(一):在C++中嵌入Lua腳本

這時,編譯并運行,你會得到如下結(jié)果 :

Lua教程(一):在C++中嵌入Lua腳本

接下來,我們講講IOS項目怎么集成Lua。

IOS項目集成Lua

IOS項目集成Lua的方式與Mac大同小異,順便補充一句,Lua本質(zhì)上是一個c程序,任何平臺下面集成相應c庫的方法都是適用的。

這里我主要寫一些注意事項吧:

1.我們剛才編譯好的macosx庫只能給mac程序用,ios需要單獨編譯(當然,windows和linux也需要再單獨編譯,編譯方法見下載的lua-5.2.3/doc/readme.html)

2.編譯ios可以通過添加一個static library,然后把所有的Lua文件添加到這個Library里面。最后,讓主項目依賴這個Library就可以了。

3.直接使用luaL_dofile(lua_state, “hello.lua”)是行不通的,因為ios項目的資源路徑在一個沙盒里。我們必須取得全路徑才可以訪問到這個hello.lua文件。以cocos2d-x為例,我們可以使用下面的代碼獲得hello.lua的全路徑,然后再傳遞給Lua虛擬機。

 

復制代碼 代碼如下:

  std::string scriptPath = FileUtils::getInstance()->fullPathForFilename("hello.lua");
    int status = luaL_loadfile(lua_state, scriptPath.c_str());

 

Android項目集成Lua

Android集成Lua需要使用Android.mk把Lua打包成一個靜態(tài)庫,然后在項目里面包含這個Lua模塊。具體的做法可以參考cocos2d-x。

延伸 · 閱讀

精彩推薦
  • LuaLua中計算、執(zhí)行字符串中Lua代碼的方法

    Lua中計算、執(zhí)行字符串中Lua代碼的方法

    這篇文章主要介紹了Lua中計算、執(zhí)行字符串中Lua代碼的方法,類似JavaScript中eval函數(shù)的功能,在Lua中也可以實現(xiàn),需要的朋友可以參考下 ...

    腳本之家6322020-04-30
  • Lua深入探究Lua中的解析表達式

    深入探究Lua中的解析表達式

    這篇文章主要介紹了深入探究Lua中的解析表達式,對于其語法部分的說明和示例都超詳細,極力推薦此文!需要的朋友可以參考下 ...

    腳本之家3542020-05-05
  • LuaLua中table庫函數(shù)方法介紹

    Lua中table庫函數(shù)方法介紹

    這篇文章主要介紹了Lua中table庫函數(shù)方法介紹,本文講解了concat、insert、maxn、remove、sort、foreachi等方法,需要的朋友可以參考下 ...

    腳本之家2502020-04-17
  • LuaLua和C語言的交互詳解

    Lua和C語言的交互詳解

    這篇文章主要介紹了Lua和C語言的交互詳解,Lua和C語言通過棧完成交互,本文結(jié)合代碼實例詳細講解了交互的方法,需要的朋友可以參考下 ...

    果凍想3702020-04-14
  • LuaLua簡介、編譯安裝教程及變量等語法介紹

    Lua簡介、編譯安裝教程及變量等語法介紹

    這篇文章主要介紹了Lua簡介、編譯安裝教程及變量等語法介紹,本文同時講解了lua注釋語法、Lua命令行方式等內(nèi)容,需要的朋友可以參考下 ...

    junjie3632020-04-14
  • LuaLua中的元方法__newindex詳解

    Lua中的元方法__newindex詳解

    這篇文章主要介紹了Lua中的元方法__newindex詳解,本文講解了查詢與更新、監(jiān)控賦值、通過table給另一個table賦值等內(nèi)容,需要的朋友可以參考下 ...

    笨木頭8872020-04-09
  • LuaLua實現(xiàn)__add方法重載示例

    Lua實現(xiàn)__add方法重載示例

    這篇文章主要介紹了Lua實現(xiàn)__add方法重載示例,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下 ...

    腳本之家7452020-04-24
  • LuaLua教程(二):基礎知識、類型與值介紹

    Lua教程(二):基礎知識、類型與值介紹

    這篇文章主要介紹了Lua教程(二):基礎知識、類型與值介紹,本文講解了Hello World程序、代碼規(guī)范、全局變量、類型與值等內(nèi)容,需要的朋友可以參考下 ...

    腳本之家5922020-04-28
主站蜘蛛池模板: 国产精品久久久久久久福利院 | 俄罗斯激情性孕妇孕交大全 | 亚洲一区二区三区福利在线 | 国产午夜亚洲精品一区网站 | 99久久999久久久综合精品涩 | 拿捏小说 | 金莲你下面好紧夹得我好爽 | 边吃胸边膜下刺激免费男对女 | 91香蕉国产在线观看人员 | 高清在线观看mv的网址免费 | 午夜影院一区二区三区 | 男人的j进入女人的j免费 | bbbbbbaaaaaa毛片 | 亚洲欧美国产精品久久久 | 洗濯屋し在线观看 | 视频一区二区国产无限在线观看 | 日韩精品首页 | 192.168.191| 免费特黄视频 | 日韩欧美一区二区三区免费看 | 国产激情一区二区三区成人91 | 偷偷狠狠的日日高清完整视频 | 日韩一品在线播放视频一品免费 | 国产福利在线免费观看 | 男人懂得网站 | 青青青在线观看国产精品 | 国产精品99精品久久免费 | 亚洲视频高清 | 国产一区二区视频免费 | 欧美日韩一区二区中文字幕视频 | 亚洲精品在看在线观看 | 女人麻豆国产香蕉久久精品 | 天天操天天干天天舔 | 30分钟的高清视频在线观看 | 亚洲卡一卡2卡三卡4麻豆 | www一区| 4399h漫画| 日韩成本大片35分钟免费播放 | 亚洲精品午夜级久久久久 | 国内精品国语自产拍在线观看55 | 国产私人影院 |