當用c函式擴充套件lua時,最好就是將**設計為乙個c模組。
直接上**:
#include
#include
#include
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
//待註冊的c函式,和上一節相同
static
int myadd(lua_state* l)
static
int mysin(lua_state *l)
//lual_reg結構體
//最後乙個元素的兩個欄位均為null,表示lua註冊函式已經到達陣列的末尾。
static
const
struct lual_reg mylib = ,//第乙個欄位為字串,在註冊時用於通知lua該函式的名字。
,};//匯出函式庫
//函式名必須為luaopen_***,其中***表示library名稱。lua**require "***"對應。
int luaopen_mylib(lua_state *l)
編譯**,生成動態鏈結庫(linux的so,或windows的dll)
gcc mylib.c -fpic -shared -o mylib.so
將包生成庫檔案,拷貝到lua**所在的當前目錄,或者是lua_cpath環境變數所指向的目錄,以便於lua解析器可以正確定位到他們。
在mylib.so同目錄新增檔案test.lua
local mylib = require("mylib")
local
sin = mylib.mysin(2);
local num = mylib.myadd(123,44)
print(sin)
print(num)
執行lua**
lua test.lua
C語言和Lua互動 三
新建config.lua配置檔案,檔案內容 background 同目錄新建test.c檔案 include include include lua.h include lauxlib.h include lualib.h lua state l null 獲取table對應key的值,假設tabl...
Lua和C語言的互動(一)
lua生來就是為了和c互動的,因此使用c擴充套件lua或者將lua嵌入到c當中都是非常流行的做法。要想理解c和lua的互動方式,首先要回顧一下c語言是如何處理函式引數的。c函式和引數 大家知道c語言是用彙編實現的,在組合語言中可沒有函式的概念,與函式對應的是叫做子過程的東西,子過程就是一段指令,乙個...
Lua和C語言的互動(一)
lua生來就是為了和c互動的,因此使用c擴充套件lua或者將lua嵌入到c當中都是非常流行的做法。要想理解c和lua的互動方式,首先要回顧一下c語言是如何處理函式引數的。c函式和引數 大家知道c語言是用彙編實現的,在組合語言中可沒有函式的概念,與函式對應的是叫做子過程的東西,子過程就是一段指令,乙個...