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

C++ 从Lua内部获取Lua状态,以便将其传递回C,c++,dll,lua,C++,Dll,Lua,我能够从Lua中加载从C源代码创建的DLL。因此,我希望能够将当前的Lua状态从Lua传递到加载的DLL 基本上我使用的是一个使用Lua的游戏引擎。所述游戏引擎的场景编辑器创建Lua状态并调用Lua脚本,我知道它对所有调用的脚本使用1个Lua状态。所以,我可以想象,状态是从这些lua脚本本身中知道的。从这些LUA脚本中,我想加载自己的DLL,并将此状态传递给DLL,因此我的C++代码可以使用那个LUA状态从相同的LUA脚本调用LUA函数,并处于相同的状态。这有意义吗 我遗漏了一些显而易见的东西,

我能够从Lua中加载从C源代码创建的DLL。因此,我希望能够将当前的Lua状态从Lua传递到加载的DLL


基本上我使用的是一个使用Lua的游戏引擎。所述游戏引擎的场景编辑器创建Lua状态并调用Lua脚本,我知道它对所有调用的脚本使用1个Lua状态。所以,我可以想象,状态是从这些lua脚本本身中知道的。从这些LUA脚本中,我想加载自己的DLL,并将此状态传递给DLL,因此我的C++代码可以使用那个LUA状态从相同的LUA脚本调用LUA函数,并处于相同的状态。这有意义吗

我遗漏了一些显而易见的东西,我想这不会让我感到惊讶——我远非Lua专家


但是如果你调用,你得到的函数句柄将被Lua本身用状态调用,不是吗?请参见

将DLL编写为用C实现的普通Lua模块,但它加起来等于在DLL名称后命名单个导出函数,以便普通require函数可以加载它。要获取require mylib加载的库,请使用导出的函数luaopen_mylib创建mylib.dll,该函数创建一个包含所有希望使用的方法的表并返回该表。该函数以及它创建的所有其他方法在每次调用时都会传递当前Lua状态


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

我认为这是正确的-Lua调用的C函数被传递到Lua状态。只需像这样定义DLL函数:int mylufunctionlua_State*L{//L包含State}。很抱歉,格式有问题,评论似乎没有换行符。