在C/C++中使用地址调用lua函数?

我一直想知道是否可以通过使用其地址在C/C++中调用lua函数。 例如,

function print2(arg)
print("Printed: "..arg)
end

print(print2) -- print出看起来像是64位地址。

我对C和lua语言的内部工作不是很了解,所以如果这完全不可行,请原谅。

点赞
用户7509065
用户7509065

不可以。原因如下:

  1. 官方文档 明确表示:“无法将指针转换回其原始值。”
  2. 轻量级 C 函数、C 闭包和 Lua 函数具有不同的内部表示,但在打印时都会显示为 function: 0x55664ffe8de0
  3. 即使您使用了一些非公开的函数来跳过第 1 点,并且知道了要跳过第 2 点的函数类型,您仍然会面临一个问题,即在获取指针和调用它之间,垃圾回收器可能会回收您想要调用的函数。
2020-06-12 21:07:06