3
回答
luajit FFI LUA脚本中怎样调用C自己定义的函数
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

C代码如下:

#include <stdio.h>
#include <luajit.h>

typedef struct foo { int a, b; } foo_t;

extern int test(int a);
extern int dofoo(foo_t *f, int n);

int test(int a)
{
  printf("a=%d\n", a);

  return 0;
}

int dofoo(foo_t *f, int n)
{
      foo_t foo = *f;

      printf("dofoo\n");

      printf("foo.a=%d,foo.b=%d\n", foo.a,foo.b);

      foo.a = 100;
      foo.b = 200;

      *f = foo;

      return 0;
}

int main(int argc, char *argv[]) {
      lua_State *L;

      L = luaL_newstate(); /*创建一个解释器句柄*/
      if (L == NULL) {
          printf("L is null1\n");
          return -1;
      }

      luaL_openlibs(L);             /*打开所有的Lua库*/

      luaL_loadfile(L,"./lua1.lua"); /*调入Lua脚本文件*/

      lua_pcall(L,0,0,0); /*执行Lua脚本*/
      lua_close(L);       /*关闭句柄*/

      return 0;
}



lua1.lua如下:

local ffi = require("ffi")

ffi.cdef[[
    int printf(const char *fmt, ...);
    typedef struct foo { int a, b; } foo_t;  // Declare a struct and typedef.
    int dofoo(foo_t *f, int n);  /* Declare an external C function. */
    int test(int a);
]]

ffi.C.printf("Hello %s!\n", "world")

local foo = ffi.new("foo_t")
foo.a = 10
foo.b = 20
ffi.C.printf("foo.a=%d\n", ffi.new("int", foo.a))
ffi.C.printf("foo.b=%d\n", ffi.new("int", foo.b))

ffi.C.testddf(new("int", 200))



我的想法就是在LUA中调用C代码中的test函数,不是用LUA C API的方式,是用LuaJIT的FFI库

我试果,如果我是调用象printf,sleep这种通用的库函数是可以的,但是调用我自己C代码中的函数,就是不型,好象有点类似找不到命名空间一样?

该怎样实现的,标准C里?

Lua
举报
笑天居士
发帖于3年前 3回/2K+阅
顶部