//test.c #include <stdio.h> #include "lua.h" #include "lualib.h" #include "lauxlib.h" #include <stdlib.h> lua_State *L; int main(){ L = luaL_newstate();//建立state以及加載標準庫 luaL_openlibs(L);//打開全部lua標準庫加入到已經建立的state luaL_loadfile(L,"1.lua");//加載lua文件 lua_pcall(L,0,0,0);//至關於把整個lua文件的內容當成一個function來執行 lua_getglobal(L,"lua_value");//從lua變量空間中將全局變量lua_value讀取出來放入虛擬堆棧中 int value = (int)lua_tonumber(L,-1);//從虛擬堆棧中讀取剛纔壓入的變量,-1表示讀取堆棧最頂端的元素 printf("%d\n",value); return 0; }
//1.lua lua_value = 100; print "hello lua";
例子2:lua
//例子2 test.c 1 #include <stdio.h> 2 #include "lua.h" 3 #include "lualib.h" 4 #include "lauxlib.h" 5 #include <stdlib.h> 6 7 lua_State* L; 8 int add(lua_State* L){ 9 10 int x = luaL_checkint(L,1); 11 12 int y = luaL_checkint(L,2); 13 14 printf("result:%d\n",x+y); 15 16 return 1; 17 } 18 19 int main(int argc, char *argv[]) 20 { 21 L = luaL_newstate(); 22 23 luaL_openlibs(L); 24 25 //lua_pushcfunction(L, add); 26 27 //lua_setglobal(L, "ADD"); 28 //從堆棧上彈出一個值,並將其設置到對應的全局變量「ADD」中 29 //它由一個宏定義出來:#define lua_setglobal(L,s) lua_setfield(L,LUA_GLOBALSINDEX,s) 30 31 lua_register(L,"ADD",add); 32 33 if (luaL_loadfile(L,"mylua.lua")){ 34 printf("error\n"); 35 } 36 37 lua_pcall(L,0,0,0); 38 39 printf("----------------------"); 40 41 lua_getglobal(L, "mylua"); 42 43 lua_pcall(L,0,0,0); 44 45 printf("hello my lua\n"); 46 return 0; 47 }
//mylua.lua 1 function mylua() 2 3 ADD(1,2) 4 ADD(3,4); 5 6 end 7 8 9 function hello() 10 11 print "hello lua and c"; 12 13 end