C語言和Lua的交互

//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
相關文章
相關標籤/搜索