經過前面幾章的介紹,相信大家對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棧狀態需要自己進行維護,若...