C 與Lua互動過程及原理

2021-09-19 16:17:05 字數 1126 閱讀 2535

c#與lua互動過程:

c# call lua :由c#檔案先呼叫lua解析器底層dll庫(由c語言編寫),再由dll檔案執行相應的lua檔案;

lua call c# :

(1)、wrap方式:首先生成c#原始檔所對應的wrap檔案,由lua檔案呼叫wrap檔案,再由wrap檔案呼叫c#檔案;

(2)、反射方式:當索引系統api、dll庫或者第三方庫時,如果無法將**的具體實現進行**生成,可採用此方式實現互動。缺點:執行效率低。

c#與lua互動原理:

c#與lua進行互動主要通過虛擬棧實現,棧的索引分為正數與負數,若果索引為正數,則1表示棧底,若果索引為負數,則-1表示棧頂。

c# call lua:由c#先將資料放入棧中,由lua去棧中獲取資料,然後返回資料對應的值到棧頂,再由棧頂返回至c#。

lua call c#:先生成c#原始檔所對應的wrap檔案或者編寫c#原始檔所對應的c模組,然後將原始檔內容通過wrap檔案或者c模組註冊到lua直譯器中,然後由lua去呼叫這個模組的函式。

從**檔案方面解釋:

lua呼叫csharp過程:

lua->wrap->c#

先生成wrap檔案(中間檔案/適配檔案),wrap檔案把字段方法,註冊到lua虛擬機器中(直譯器luajit),然後lua通過wrap就可以調c#了

或者在config檔案中新增相應型別也可以

csharp呼叫lua過程:

c#生成bridge檔案,bridge調dll檔案(dll是用c寫的庫),先呼叫lua中dll檔案,由dll檔案執行lua**

c#->bridge->dll->lua  or   c#->dll->lua

從記憶體方面解釋:說白了就是對棧進行操作

c# call lua:c#把請求或資料放在棧頂,然後lua從棧頂取出該資料,在lua中做出相應處理(查詢,改變),然後把處理結果放回棧頂,最後c#再從棧頂取出lua處理完的資料,完成互動。

C 與Lua互動原理

具體步驟 1,找到cocos自帶的繫結工具指令碼檔案genbindings.py,在cocos工程的frameworks cocos2d x tools tolua這個目錄下,把這個檔案開啟。2,在開啟的genbindings.py檔案下面找到這麼一段 這裡就是執行這個指令碼會自動生成lua繫結 的...

C 與 Lua 互動原理和優化

過程過程盡量不要在 lua 中傳遞 unity 中的類,盡量只傳遞int,float,double 型別 解決方法 在 c 中封裝方法 unity 型別的賦值,使用 id int 代表對應 object 的傳遞 呼叫的 c 方法引數數量盡量少與4個 c 方法盡量為靜態方法 減少 lua gc 在 l...

C 與Lua互動(二)

c 與lua的之間函式的相互呼叫 1.c 調lua函式 c與lua的所有互動都是通過乙個棧來完成的。我對前面提到的虛擬機器l的理解是,它就是乙個棧 可能理解的不對 然後通過對這個棧的操作來實現資料的互動。呼叫函式跟訪問變數其實差不多,前面都是做一樣的事,只是呼叫函式時獲取的變數是函式名。然後將需要的...