C與Lua的數(shù)據(jù)交互,是通過虛擬棧來完成數(shù)據(jù)交互的炮温,在C與Lua之間的交互夫否,實(shí)際上是C與虛擬棧之間的交互以及Lua與虛擬棧之間的交互挥萌。虛擬棧在Lua方是一個(gè)完整的棧操作結(jié)構(gòu),而c api對(duì)該虛擬棧操作更加靈活亡问,更像對(duì)一個(gè)數(shù)組的操作
1. C調(diào)用Lua腳本
#include <stdio.h>
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
int main() {
lua_State* L = luaL_newstate();//新建虛擬棧
luaL_openlibs(L); // 打開Lua標(biāo)準(zhǔn)庫(kù)
luaL_dofile(L, "script.lua");
lua_close(L);
Return 1;
}
//運(yùn)行結(jié)果:執(zhí)行l(wèi)ua腳本
Script.lua腳本內(nèi)容為
print(‘hello world’)
2.C API數(shù)據(jù)交互函數(shù)
- lua_get系類函數(shù):將lua腳本的全局變量放置虛擬棧中官紫,注意此處是引用計(jì)數(shù)加1
- lua_set系列函數(shù): 將虛擬棧top元素賦值給lua
- lua_push系列函數(shù): c_api向虛擬棧壓入元素
#include <stdio.h>
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
Int main() {
lua_State* L = luaL_newstate();
luaL_openlibs(L);
lua_pushnumber(L, 2); // 向棧頂推入元素2
lua_setglobal(L, “number”); // number = 2, 同時(shí)彈出棧頂
luaL_dostring(L, “print(number)”);
lua_close(L);
Return 1;
}
// 運(yùn)行結(jié)果為:打印number