lua呼叫C函式

2021-08-03 15:54:37 字數 1041 閱讀 8928

lua採取的是利用棧進行互動,利用各種lua_push***將不同的值壓入棧中,然後呼叫lua指令碼時自然會退棧取出引數執行,對於lua的虛擬機器來說,就像是發生了一次正常的函式呼叫。(這裡採用的棧是lua棧,因為若是c棧的話呼叫lua的c api就會出錯了。)需要注意的是,lua棧狀態需要自己進行維護,若發生多執行緒同時對lua棧操作,沒有加鎖保護的話會導致棧狀態混亂然後出很詭異的bug

摘自  多語言協作與二進位制互動

typedef struct lua_state lua_state;

lua虛擬機器(或叫直譯器),可以理解為乙個thread,和乙個完整的lua虛擬環境的執行狀態。

typedef int (*lua_cfunction) (lua_state *l);

能夠被lua呼叫的c函式都必須是這種規則。函式的返回的int值表示c函式返回值的個數。

void lua_pushcfunction (lua_state *l, lua_cfunction f);

將c函式壓棧,接收乙個c函式的指標引數,然後將乙個lua.function型別的物件壓棧。

void lua_register (lua_state *l, const char *name, lua_cfunction f);

// #define lua_register(l,n,f) (lua_pushcfunction(l, f), lua_setglobal(l, n))

註冊c函式為乙個全域性變數;

編譯成.so

gcc -wall -shared -fpic -o power.so -i/usr/include/lua5.1 -llua5.1 hellofunc.c

require("power")

print(square(1.44))

lua呼叫c函式

最近在進入lua程式設計的狀態,一度令我困惑的是,lua提供的功能少的可憐,跟自備電池的python相比,可說是簡陋了。連table的列印,都需要自己實現,也因此有了一打的第三方方案。後來我想明白了,以lua和c如此緊密的關係,只需要建立lua的binding,那麼豐富而效能強大的c庫資源完全可以為...

lua呼叫c函式

lua可以呼叫c函式的能力將極大的提高lua的可擴充套件性和可用性。對於有些和作業系統相關的功能,或者是對效率要求較高的模組,我們完全可以通過c函式來實現,之後再通過lua呼叫指定的c函式。對於那些可被lua呼叫的c函式而言,其介面必須遵循lua要求的形式,即 typedef int lua cfu...

Lua呼叫C 函式

現在很多伺服器研發為了節約開發成本,邏輯業務採用lua編寫,下面講講工作上遇到的一些問題,記錄方便以後查閱。我們知道用lua寫癩子胡牌演算法可能執行不是很高效,當你有現成的麻將庫,是不是可以繫結給lua使用呢,答案肯定。胡牌演算法,主要是傳遞陣列,下面就實現乙個lua傳遞陣列到c 之後就能使用胡牌演...