建立工程 引用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...