lua 呼叫c模組
阿新 • • 發佈:2019-01-02
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,1);
double op2 = luaL_checknumber(L,2 );
lua_pushnumber(L,op1 + op2);
return 1;
}
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 0;
}
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,1);
b = lua_tonumber(L,2);
c = a+b;
lua_pushnumber(L,c);
printf("test hello!!!\r\n");
return 1;
}
static const struct luaL_Reg lib[] =
{
{"testadd",add},
{NULL,NULL}
};
int luaopen_testlib(lua_State *L)
{
luaL_register(L,"testlib",lib);
return 1;
}
編譯: gcc test.c -fPIC -shared -o testlib.so
lua指令碼編寫:
require("testlib")
c = testlib.testadd(10,24)
print("The result is ",c);