在Lua/LuaJIT中转换C结构体

我有这个 C 结构体:

typedef struct { double x, y; } point_t;

我需要将一个 point_t 变量发送到 Lua 并更改其值,然后将其返回到 C。我遇到的第一个问题是在 Lua 中将其转换。该如何处理?

main.c

point_t ponto;

ponto.x = 0; ponto.y = 0;

lua_getglobal(L, "jit"); //获取具有功能的变量
lua_pushlightuserdata(L, &ponto);
lua_pcall(L, 1, 1, 0);

point_t *pontop = (point_t*)lua_touserdata(L, -1);

test.lua

jit = function(num)
  local ffi = require("ffi")
  ffi.cdef[[
  typedef struct { double x, y; } point_t;
  ]]

  local point
  local mt = {}
  point = ffi.metatype("point_t", mt)

  local a = point(3, 4)
  print(a.x, a.y)
  b = ffi.cast("point_t*",num)
  b.x = 10
  b.y = 20
  return b
end

本地变量 apoint_t 类型创建,如何将 b 转换为类似 a 的使用方式?

点赞