lua呼叫c和c函式呼叫lua的區別

2021-03-04 06:20:48 字數 2461 閱讀 8547

1樓:primo王的悲傷

乙個是lua呼叫c乙個是c呼叫lua,就像我用你的東西,和你用我的東西一樣。

lua執行過程中,可以吧lua的乙個資料拿來傳遞給c裡面,然後c執行之後可以吧資料返回給lua,這就是lua呼叫c

反過來,c在執行的時候,把資料拿給lua做處理,然後c得到處理好的資料,這就是c呼叫lua。

因為lua處理資料是非常高效率的,所以,你遇到複雜的資料的時候 ,可以自己寫乙個lua來處理這個資料

c++與lua之間呼叫 55

2樓:tree求大神

樓主,你好!

這題太難了我也不會做,沒辦法回答了,抱歉。

給樓主一些建議吧

樓主可以請教一下學校裡面程式設計的老師,也可以請教相關方面的專家!

希望對你有用,望採納!

c呼叫lua檔案中函式

3樓:匿名使用者

在c中呼叫lua函式的api主要由以下幾個:

(1)void lua_call (lua_state *l, int nargs, int nresults);

函式呼叫,nargs表示引數的個數,nresults表示返回值的個數

首先將lua函式壓棧,然後將引數依次壓棧,最後呼叫函式即可

函式呼叫時,引數和函式都會pop出棧,呼叫返回後,結果會push進棧

nresults==lua_multret,所有的返回值都會push進棧

nresults!=lua_multret,返回值個數根據nresults來調整

lua語句:

a = f("how", t.x, 14)

在c中的實現:

lua_getglobal(l, "f");        // 函式入棧

lua_pushstring(l, "how");     // 引數1入棧

lua_getglobal(l, "t");       // 表t入棧

lua_getfield(l, -1, "x");      // 引數2入棧

lua_remove(l, -2);        // 跳t出棧

lua_pushinteger(l, 14);     // 引數3入棧

lua_call(l, 3, 1);        // 呼叫函式,引數和函式都會出棧

lua_setglobal(l, "a");     // 給a賦值,棧頂出棧

上述**執行完畢後,堆疊狀態恢復原樣。

(2)int lua_pcall (lua_state *l, int nargs, int nresults, int msgh);

函式呼叫,在安全模式下,並且可以新增錯誤處理函式。

如果呼叫期間發生error,lua_pcall會捕獲之,然後push stack乙個錯誤資訊(會先將函式和引數pop出棧),並且返回乙個error code(非0的乙個值)。

發生error時,如果指定了錯誤處理函式,會在error message入棧前呼叫錯誤處理函式,具體由msgh引數來決定:

(1)msgh==0,不指定錯誤處理函式,入棧資訊不變;

(2)msgh!=0,msgh表示錯誤處理函式的堆疊index,錯誤處理函式會以error message為引數,並將返回的新的error

message入棧。主要用來給error

message新增  更多的debug資訊,比如堆疊跟蹤,因為這些資訊在pcall呼叫完之後是收集不到的。

函式返回**:

lua_ok(0):呼叫成功

lua_errrun:runtime error

lua_errmem:記憶體分配錯誤,這種情況下不會呼叫錯誤處理函式

lua_errerr:呼叫錯誤處理函式時出錯,當然,不會再進一步呼叫錯誤處理函式

lua_errgcmm:呼叫metamethod.__gc時報錯,由gc引起,和函式本身沒關係

(3)int lua_pcallk (lua_state *l, int nargs, int nresults, int errfunc, int ctx, lua_cfunction k);

函式呼叫,在安全模式下,並且允許函式yield。

4樓:

你使用的是哪個lua 版本????

我用的是 lua 5.2 ,在 codeblock 下編譯的。

你的描述和源**不符合。

printf("%d \n",(int)lua_tonumber(m_pstate,1));

應該顯示 0 。

lua堆疊中

index 1 => add函式

index 2 => 1

index 3 => 2

所以那句**試圖把lua函式轉換成為數字。應該得到0 。

後面一句應該得到3 。

你說你的結果是 2 0 。應該不會。除非你貼出來的**,和實際編譯的**不同。

關於在lua中呼叫c 函式的問題求高手

第乙個問題 你不要把lua 源 裡面的引數和lua擴充套件的c函式裡面的引數混淆版了。lua那邊,是不管什麼指權針的 那個plc這邊函式裡面的引數,當然要求是pl指標。第二個問題 對於乙個c函式來說,它必須返回乙個int值。這個int值告訴lua,它返回幾個引數到lua裡面去 可以是返回0個引數 如...

如何在lua程式中呼叫另外lua檔案中的全域性變數

直接require那個lua檔案,然後呼叫。xlua 的lua檔案呼叫另乙個lua的變數 推薦你去csdn或部落格園的論壇版塊問這個問題 這個應該是宿主程式實現的。也有可能是所有的指令碼都是載入了在一起 這個你得看宿主是怎麼處理 lua 如何引用乙個變數 lua中,函式引數為布林 數值 串等時是傳值...

c 呼叫平方根函式問題,C 呼叫平方根函式問題

用迭代法求某數a的平方根。已知求平方根的迭代公式為 x n 1 xn a xn 2 要求前後兩次求出的差的絕對值小於10 5。演算法如下 設定乙個x的初值x0 在如下程式中取x0 a 2,通過迭代公式求出x1,可以肯定與真正的平方根相比,誤差很大。用上述公式求出x的下乙個值 x1 如此繼續下去,直到...