lua 好歸好,但有很多對效率要求較高的服務,還得讓c來完成。本篇學習下lua如何呼叫c。
最重要的部分:
定義乙個 luaopen_* 函式,並呼叫 lual_openlib 函式
int luaopen_mylib(lua_state *l)
, // key-val,相當於
,// 必不可少
};lual_newlib(l,l);
return 1;
}
這個函式相當於作為此動態庫的main函式。需要注意:
1、luaopen_是此函式的字首,不可修改。後面的內容是我們在lua中使用 require 引用此庫時的字串名稱(假如名稱中帶有下劃線,在使用require需要將下劃線替換為點,例如:「mylib_test」->「mylib.test」)。
2、在lua5.0中呼叫的是lual_openlib,但是在lua5.3中,則是使用lual_newlib
下面是乙個簡單的例子:
#include //lua基礎函式庫,lua_字首
#include //輔助庫,lual_字首,利用lua.h實現的更高層的抽象
#include /**
* 定義在lua中可呼叫的函式,要遵循規範:返回值必須為int,需傳入lua_state
*/static int test(lua_state *l)
int luaopen_mylib(lua_state *l),
}; lual_newlib(l, l);
return 1;
}
lual_checkinteger() 和 lual_checklstring()是用來獲取引數的。
如何生成 .so 動態庫?
gcc -fpic -shared -o mylib.so mylib.c
詳見:【c/c++】動態庫與靜態庫
接著用lua呼叫:
--設定.so搜尋路勁
package.cpath = "./?.so"
--載入我們自定義的庫mylib.so
local mylib = require "mylib"
mylib.test(666, "mick")
輸出如下:
come from test: num = 666 str = mick len = 4
以上僅僅是簡單的從lua中獲取了資料並列印出來,關於資料的返回,還涉及到lua虛擬棧,後面在做詳細學習。
c 呼叫lua,lua呼叫c
建立工程 引用lua的動態庫和工程專案的配置資訊 結合 main.lua指令碼檔案 print lua呼叫c lua呼叫c 結合部分 c 向lua堆疊寫東西 通過lua堆疊 lua通過lua全域性標量獲取返回lua堆疊再到c lua傳遞數字給c cgivelua wangcheng 22,1 lua...
C呼叫C 動態庫,靜態庫
c呼叫c 動態庫,靜態庫 1 include 2 using namespace std 34 class paul 5 10 11 int paul add int a,int b 12 17 18 extern c 如果沒有則不行 19 25 1 include 2 extern void ca...
VC 呼叫C 動態庫
近期專案中,需要訪問客戶資料庫,客戶不希望直接訪問其資料庫,而是以動態庫介面的形式開放,還是用c 開發的。經過不斷嘗試,總結方法如下 包含動態庫 using test.dll using namespace test lib using namespace runtime interopservic...