1. 程式人生 > >lua 呼叫c模組

lua 呼叫c模組

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);