c函數聲明要符合類型:typedef int (*lua_CFunction) (lua_State *L);
1.在c代碼運作環境下執行lua代碼。
#include <stdio.h>
#include <string.h>
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
static int cadd(lua_State* L)
{
double op1 = luaL_checknumber(L,);
double op2 = luaL_checknumber(L,);
lua_pushnumber(L,op1 + op2);
return ;
}
const char* testfunc = "print(cadd(1.0,2.0))";
int main()
{
lua_State* L = luaL_newstate();
luaL_openlibs(L);
lua_register(L, "cadd", cadd);
if (luaL_dostring(L,testfunc))
printf("Failed to invoke.\n");
lua_close(L);
return ;
}
2.引用c動态庫
#include <stdio.h>
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
static int add(lua_State *L)
{
int a,b,c;
a = lua_tonumber(L,);
b = lua_tonumber(L,);
c = a+b;
lua_pushnumber(L,c);
printf("test hello!!!\r\n");
return ;
}
static const struct luaL_Reg lib[] =
{
{"testadd",add},
{NULL,NULL}
};
int luaopen_testlib(lua_State *L)
{
luaL_register(L,"testlib",lib);
return ;
}
編譯: gcc test.c -fPIC -shared -o testlib.so
lua腳本編寫:
require("testlib")
c = testlib.testadd(,)
print("The result is ",c);