第一版是為 Lua 5.0 編寫的。雖然後來的版本在很大程度上仍然適用,但有一些差異。
第四版針對 Lua 5.3,可在 Amazon 和其他書店購買。
購買本書,您也可以幫助 支援 Lua 專案。
![]() |
用 Lua 程式設計 | ![]() |
第四部分。C API 第 26 章。從 Lua 呼叫 C |
擴充 Lua 的基本方法之一是讓應用程式將新的 C 函式註冊到 Lua。
當我們說 Lua 可以呼叫 C 函式時,這並不表示 Lua 可以呼叫任何 C 函式。(有些套件允許 Lua 呼叫任何 C 函式,但它們既不可移植,也不夠健全。)正如我們之前所見,當 C 呼叫 Lua 函式時,它必須遵循一個簡單的通訊協定來傳遞引數和取得結果。同樣地,C 函式若要從 Lua 呼叫,也必須遵循一個通訊協定來取得其引數並傳回其結果。此外,C 函式若要從 Lua 呼叫,我們必須註冊它,也就是說,我們必須以適當的方式將其位址提供給 Lua。
當 Lua 呼叫 C 函式時,它使用與 C 用來呼叫 Lua 相同類型的堆疊。C 函式從堆疊中取得其引數,並將結果推入堆疊中。為了區分結果和堆疊中的其他值,函式(在 C 中)傳回它留在堆疊中的結果數目。這裡一個重要的概念是,堆疊並非一個全域結構;每個函式都有自己的私有本機堆疊。當 Lua 呼叫 C 函式時,第一個引數永遠會在這個本機堆疊的索引 1 處。即使 C 函式呼叫 Lua 程式碼,而 Lua 程式碼又呼叫同一個(或另一個)C 函式,這些呼叫只會看到自己的私有堆疊,其第一個引數在索引 1 處。
版權所有 © 2003–2004 Roberto Ierusalimschy。保留所有權利。 | ![]() |