c 呼叫lua,lua呼叫c

2021-08-10 16:43:52 字數 2963 閱讀 3682

建立工程 引用lua的動態庫和工程專案的配置資訊  結合 main.lua指令碼檔案

print("--lua呼叫c--lua呼叫c++ 結合部分----------------") --c++ 向lua堆疊寫東西 通過lua堆疊 lua通過lua全域性標量獲取返回lua堆疊再到c++

--]]

--lua傳遞數字給c++

--cgivelua("wangcheng", 22, 1) --lua傳遞乙個字串引數給c++ lua ture 為0 lua 除了 false 和 nil 之外都是true

--local arr=

--ctestarr(arr) --lua傳遞陣列給c++呼叫

--[[

local tab =

ctesttable(tab, 123)

print("&&&&&&&\n")

local a, b = ctestre()

print("a = "..a.."b="..b)

--]]

--for key, value in pairs(ctestre()) do

--print(key.."="..value.."\n")

--end

width = 1280

print("id:"..tom)

config =

for key, value in pairs(person) do

print(key.."="..value)

endfunction errfun()

print("lua is error")

endfunction event(p1, p2) --c++呼叫lua的函式 c++傳參給lua

print("c++ call lua function "..p1.."==")

for key, value in pairs(p2) do

print(key.."->"..value)

endlocal re=

return re --lua傳回返回值給c++呼叫

end

extern "c" //注釋:lua都是以c語言編譯的,而當前專案是c++專案所以需要宣告下此時是c語言的

;#include #include using namespace std;

int ctestre(lua_state* lua) //lua呼叫c++ 返回值

int ctesttable(lua_state* lua) //lua傳遞表給c++

//lual_checktype(lua, 1, lua_ttable); //lua呼叫c++ 引數型別檢查 如果引數不對 lua將在這停止不執行下面的操作的 1 乙個引數

if (lua_type(lua, 2 ) != lua_tnumber) //第二個引數 2

//取其中乙個val值 呼叫表中乙個key值

lua_getfield(lua, 1, "name"); //local tab =

size_t size;

printf("name= %s", lua_tostring(lua, -1, &size));

return 0;

}int ctestarr(lua_state* lua) //lua 傳遞陣列給c++呼叫

ctestarr(arr) --lua傳遞陣列給c++呼叫

for (int i = 1; i <= len; ++i) //lua 表的下標從1開始的

return 0;

}int cgivelua(lua_state* lua) //lua呼叫c++函式 無引數 無返回值 (引數通過壓棧

int main(int argc, char* argv) // lua與c++通過lua堆疊互動的

{ lua_state* lua = lua_open(); //開啟lua堆疊的狀態

luaopen_base(lua); //開啟lua基本庫

luaopen_string(lua); //開啟lua的string庫

luaopen_table(lua); //新增table庫

lua_register(lua, "cgivelua", cgivelua); //註冊 c++通知lua定義了這個函式,通過lua堆疊通知一下

lua_register(lua, "ctestarr", ctestarr);

lua_register(lua, "ctesttable", ctesttable);

lua_register(lua, "ctestre", ctestre);

//c++為lua設定全域性變數 (為lua命名變數所以 必須在讀取lua之前)

lua_pushstring(lua, "c++ hello");

lua_setglobal(lua, "tom");

//c++呼叫lua 給lua傳個表

lua_newtable(lua);

lua_pushstring(lua, "name"); //key

lua_pushstring(lua, "jhon"); //value

lua_settable(lua, -3);

lua_pushstring(lua, "age");

lua_pushnumber(lua, 33);

lua_settable(lua, -3);

lua_setglobal(lua, "person"); //建立乙個表並命名為lua全域性表:person

if(lual_loadfile(lua, "main.lua"))//載入檔案 返回0 成功

{ const char* _error = lua_tostring(lua, -1); //檢視lua報錯資訊從lua堆疊的頂端取 -1 棧頂 從-1,-2,-3.。。。 棧低

cout<<_error<

Lua Lua呼叫C動態庫

lua 好歸好,但有很多對效率要求較高的服務,還得讓c來完成。本篇學習下lua如何呼叫c。最重要的部分 定義乙個 luaopen 函式,並呼叫 lual openlib 函式 int luaopen mylib lua state l key val,相當於 必不可少 lual newlib l,l...

c 呼叫c和c呼叫c

c 的設計是相容c的,但是呼叫的時候還是需要遵循規則 1 包含標頭檔案 extern c 2 宣告呼叫的函式 extern c 為什麼要加extern c 1 c 語言支援函式過載,c語言不支援函式過載。2 函式被c 編譯後在庫中的名字與c語言的不同。void add int x,int y 該函式...

C 呼叫 C dll,同時c 呼叫c

筆者解決這兩個問題,花了很長一段時間,網上提供能正常執行的沒有找到,不過一邊東拼西湊,一邊靠朦還是解決了。先貼上 dllimport c users administrator.sc 201901090132 desktop opengl dll3 release dll3 dll3.dll ent...