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

2021-04-21 02:38:07 字數 3365 閱讀 8143

1樓:匿名使用者

第乙個問題:

你不要把lua 源**裡面的引數和lua擴充套件的c函式裡面的引數混淆版了。lua那邊,是不管什麼指權針的(那個plc這邊函式裡面的引數,當然要求是pl指標。

第二個問題:

對於乙個c函式來說,它必須返回乙個int值。這個int值告訴lua,它返回幾個引數到lua裡面去(可以是返回0個引數;如果是0,那麼就返回0)。

第三個問題:

lua_tonumber就是把lua堆疊裡的相應索引的值作為乙個整數返回。你這條語句裡就是把lua那邊傳給來的引數賦給了num變數。

2樓:onlylove無雨

你的形參指標型別,也就是乙個位址,在機器裡,位址是用整數表示的。

傳乙個版整數進去,是不會報錯的權。

我猜你的這個函式應該在類 hellolua 已經定義了原型,在類外實現時,只能按照原型來實現,如果修改返回型別,就變成了重新定義,也就是過載,在類外是不允許過載原型的。

你說的是不是這樣:int num; lua_pushnumber(pl,f(num));

num 裡應該是初始時的預設值,應為 f 函式是值傳遞,不會改變num的值,除非 f 函式引數為指標型別,而且返回型別為 指標型別。

lua如何呼叫c++函式?

3樓:

順序搞反了啊。 你已經定義了 csum 函式lual_dofile 那一句放到 lua_setglobal後面。

你必須在l 環境中註冊 int csum(lua_state*)函式後,然回

後再答dofile。不然你dofile的時候c函式還沒有註冊,lua當然無法使用這個函式啦。

乙個c++和lua呼叫的簡單問題。。。高分求高手!!!

4樓:空雪夢見

#include

#include "lua.hpp"

const char* script =

"index = 1;\n"

"story1 = \n"

";\n"

"function getstory()\n"

"  index = index + 1;\n"

"  return story1[index-1];\n"

"end;";

int main()

5樓:

清除堆疊可以使用 lua_settop() 函式 將指定 index 之後的元素清除。e5a48de588b662616964757a686964616f31333332643838

所以lua_settop(pl,0) 就將整個棧清空了。

void lua_settop (lua_state *l, int index);

accepts any index, or 0, and sets the stack top to this index. if the new top is larger than the old one, then the new elements are filled with nil. if index is 0, then all stack elements are removed.

#include

#include "lua.hpp"

const char* script =

"index = 1;\n"

"story1 = \n"

";\n"

"function getstory()\n"

"  index = index + 1;\n"

"  return story1[index-1];\n"

"end;";

int main()

如何正確在lua中呼叫c++的介面

c++ 呼叫lua函式問題。

6樓:空雪夢見

1、你是不是要對建立出來的虛擬機器呼叫lual_openlibs一下?

2、啥叫載入lua模組……送一內個包含載入模組的lua語句的字串到容虛擬機器裡面跑一下是不是能解決3、我也覺得可以直接呼叫函式啊,詳細說一下「行不通」是什麼情況。因為我以前寫的東西就是載入一次指令碼,然後就一直呼叫裡面的函式了,沒遇到問題……

7樓:匿名使用者

不懂你在說什麼,為什麼呼叫模組方法會失敗,你怎麼匯入的模組,給點**比說一堆話都好解釋

另外,已經存在的函式,不需要載入什麼檔案就能一直用,完全不懂你在搞什麼

8樓:咋地要啥沒啥

雖然過了很長時間了,但是最近我也在找怎麼能解決這個問題。

最後我看版到了lua原始碼中乙個函式權

是這麼寫的,應該是可以的。總體上說,就是模組會作為乙個table存放在_g中。所以,先獲取這個模組,再在模組中搜尋函式,然後就push引數呼叫。

static int traceback (lua_state *l)

lua_getfield(l, -1, "traceback");

if (!lua_isfunction(l, -1))

lua_pushvalue(l, 1); /* pass error message */

lua_pushinteger(l, 2); /* skip this function and traceback */

lua_call(l, 2, 1); /* call debug.traceback */

return 1;}

關於在c++中呼叫lua指令碼的幾個簡單問題、、求達人!3q!

9樓:匿名使用者

lua_state* p = lua_open();

//建立lua虛擬機器的環境。#define lua_open() lual_newstate()

luaopen_base(p);

luaopen_math(p);

luaopen_string(p);

//以上加入這些庫,就像c包含標頭檔案

lua_settop(p, 0);

//清空棧空間

lua_getglobal(p, "key");

//取乙個全域性變數為版

「key」,權壓入棧頂

int temp = lua_isstring(p, 1);

//當判斷值是乙個字串或是乙個數字(數字總能轉換成字串)時,返回 1 ,否則返回 0

const char* str = lua_tostring(p, 1);

//把棧頂的資料轉換成字串。這個函式沒有出棧功能,可以使用lua_pop(p,1)將棧頂元素彈出lua_close(p);

//釋放資源

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

乙個是lua呼叫c乙個是c呼叫lua,就像我用你的東西,和你用我的東西一樣。lua執行過程中,可以吧lua的乙個資料拿來傳遞給c裡面,然後c執行之後可以吧資料返回給lua,這就是lua呼叫c 反過來,c在執行的時候,把資料拿給lua做處理,然後c得到處理好的資料,這就是c呼叫lua。因為lua處理資...

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

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

C語言函式呼叫的問題

主函式的a作為輸入引數輸入給函式aaa進行計算,計算後a的值不發生變化。這是c語言的基本規則。從編譯原理角度講,輸入aaa的只是a的值,並不是a所在的暫存器或位址,a的值輸入aaa後,該值被存放在另乙個臨時暫存器或位址,發生改變的是這個臨時暫存器或位址的值,而非a所在的暫存器或位址的值,所以,a的值...