Lua 指令碼語言 與 C的互相呼叫

2021-07-11 06:06:11 字數 1465 閱讀 9142

lua訪問c++:

將c的函式包裝成lua環境認可的函式

將包裝好的函式註冊到lua環境中

lua呼叫c函式時,

c函式從棧中獲取引數,並將計算結果壓入棧,並返回壓入棧的結果的數量

從lua指令碼中呼叫c++函式,函式必須定義lua_cfunction型別。格式如下:

int  (lua_cfunction*)(lua_state*)

例子:將c函式包裝成lua可使用的函式型別      lua_cfunction

註冊包裝好的函式到lua的表中

像使用普通的lua函式那樣使用註冊函式

void  printhelloworld()

int   addsum( int a, int b )

包裝成lua可訪問的函式型別

(從普通的c函式 包裝成lua可訪問的int  (lua_cfunction*)(lua_state*)型函式)

static int l_printhelloworld(lua_state* l)

static int l_addsum(lua_state* l)

將包裝函式註冊到lua中( lua中定義的變數和函式存放在乙個全域性table中)

lua_pushcfunction(l, l_printhelloworld);

lua_setglobal(l,」printhelloworld」);//global[「printhelloworld」] = l_printhelloworld

lua_pushcfunction(l, l_addsum);

lua_setglobal(l,」addsum」);//global[「addsum」] = l_addsum

test.lua中使用

printhelloworld();

addsum(3,5);

c++訪問lua:

請求lua函式入棧。

將函式需要的引數入棧,入棧順序按照引數被宣告的順序。

告知lua虛擬機器入棧引數的個數、函式返回值的個數,並呼叫此lua函式。

從棧定獲得返回值,先返回的先入棧,然後將返回值顯式出棧。

例子:

func.lua

--變數定義width=1 ;

height=2 ;

--lua函式定義,實現加法

function sum(a,b)   

return a+b ;

end--lua函式定義,實現字串相加

function mystrcat(a,b)   

return a..b ;

end--lua函式定義,通過呼叫c**中的csum函式實現加法

function mysum(a,b)   

return csum(a,b) ;

end 

int main(int argc,char** argv)

c 呼叫指令碼語言Lua 簡單Demo

c 呼叫指令碼語言lua 簡單demo 混合模式程式集是針對 v2.0.50727 版的執行時生成的,在沒有配置其他資訊的情況下,無法在 4.0 執行時中載入該程式集。呼叫步驟 1.宣告lua虛擬機器 lua m lua new lua 2.將c 的物件方法註冊到lua中,使lua可以呼叫該方法。c...

LUA指令碼語言入門

使用例程 1.函式的使用 以下程式演示了如何在lua中使用函式,及區域性變數 例e02.lua functions function pythagorean a,b local c2 a 2 b 2 return sqrt c2 end print pythagorean 3,4 執行結果 5程式說...

Lua指令碼語言參考二

2 語言 這一節從詞法 語法 句法上描述 lua 換句話說,這一節描述了哪些 token 符記 是有效的,它們如何被組合起來,這些組合方式有什麼含義。關於語言的構成概念將用常見的擴充套件 bnf 表示式寫出。也就是這個樣子 意思是 0 或多個 a a 意思是乙個可選的a 非最終的符號會保留原來的樣子...