C 呼叫Lua的函式

2021-06-27 07:04:11 字數 1041 閱讀 2998

經過前面幾章的介紹,相信大家對lua的堆疊已經比較熟悉了,如果還不是很熟悉的朋友,建議多看幾遍前面的教程,或者多敲幾次**。

那麼,如果已經對lua

的堆疊比較熟悉,接下來的內容就很簡單了。

今天我們來看看c++

如何呼叫

lua的函式,先看看現在

lua檔案是什麼樣的:

[plain]view plain

copy

print?

-- hellolua.lua檔案  

myname = "beauty girl"  

hellotable =   

function helloadd(num1, num2)  

return (num1 + num2)  

end;  

我們看到多了個helloadd

函式,那麼,現在我們要用

c++呼叫這個函式。

(旁白:肯定又要用到getglobal

了,每次都有它~!

= =)

直接上**了:

[cpp]view plain

copy

print?

/* c++呼叫lua的函式 */

void

hellolua::demo3()   

簡單說明一下步驟:

1) 執行指令碼(旁白:我就知道你會說廢話。。。)

2) 將helloadd

函式放到棧中:

lua_getglobal(pl, 「helloadd」) 。(旁白:看吧,我就知道~!)

3) helloadd有

2個引數,我們要把引數傳遞給

lua,所以

2個引數都要放到棧裡。

4) 第2和第3

步已經把函式所需要的資料都放到棧裡了,接下來只要告訴

lua去棧裡取資料,執行函式

~! 呼叫

lua_call

即可,注釋已經很詳細了,這裡就不重複了。

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 push 將不同的值壓入棧中,然後呼叫lua指令碼時自然會退棧取出引數執行,對於lua的虛擬機器來說,就像是發生了一次正常的函式呼叫。這裡採用的棧是lua棧,因為若是c棧的話呼叫lua的c api就會出錯了。需要注意的是,lua棧狀態需要自己進行維護,若...