从Lua内部获取Lua状态,以便将其传递回C。

我能够从 Lua 中加载由 C 源代码创建的 DLL。所以,我想要做的是从 Lua 将当前 Lua 状态传递到加载的 DLL 中。

基本上,我正在使用一个使用 Lua 的游戏引擎。该游戏引擎的场景编辑器创建 Lua 状态并调用 Lua 脚本,我确信它对所有调用的脚本都使用一个 Lua 状态。因此,我想象这个状态从这些 Lua 脚本本身中是已知的。我想要从这些 Lua 脚本中加载我自己的 DLL 并将这个状态传递给该 DLL,以便我的 C++ 代码可以使用该 lua 状态从同一个 lua 脚本中调用 lua 函数并处于相同的状态。这讲得通吗?

原文链接 https://stackoverflow.com/questions/3659426

点赞
stackoverflow用户18901
stackoverflow用户18901

我猜我错过了一些显而易见的东西(这并不令我惊讶 - 我远非 Lua 专家)。

但是,如果你调用 package.loadlib ,你得到的函数句柄会被 Lua 本身用 state 调用,不是吗?请参见 CFunction 原型

2010-09-07 14:24:29
stackoverflow用户68204
stackoverflow用户68204

将你的 DLL 作为一个普通的 Lua 模块使用 C 实现。PiL 有一个描述,但它可以通过将单个导出函数命名为 DLL 的名称来实现,以便普通的 require 函数可以加载它。为了让库通过 require "mylib" 加载,你需要创建一个具有导出函数 luaopen_mylib() 的 mylib.dll,该函数创建一个包含你想要使用的所有方法的表,并将其返回。该函数以及它创建的所有其他方法,在每次调用时都会传递当前的 Lua 状态。

如果你的引擎不允许脚本中使用 require,那么它也不可能允许使用 package.loadlib,你可能根本无法加载你的 DLL。

2010-09-07 18:53:49