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:

//例子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

 

你可能感兴趣的:(lua)