我能够从Lua中加载从C源创建的DLL。所以我想要做的是将当前的Lua状态从Lua传递给加载的DLL。
基本上我使用的是使用Lua的游戏引擎。所述游戏引擎的场景编辑器创建Lua状态并调用Lua脚本,我知道它为所有调用的脚本使用1 lua状态。所以,我想这个状态是从这些lua脚本本身中知道的。从这些Lua脚本中我想加载我自己的DLL并将此状态传递给该DLL,因此我的C ++代码可以使用该lua状态从相同的lua脚本调用lua函数并处于相同的状态。那有意义吗?
答案 0 :(得分:4)
我错过了一些明显的东西,我想(这不会让我感到惊讶 - 我远离Lua专家)。
但是如果你打电话给package.loadlib,你回来的函数句柄就会被Lua本身用状态调用,不是吗?见the CFunction prototype
答案 1 :(得分:3)
将您的DLL编写为在C. PiL has a description中实现的普通Lua模块,但它增加了在DLL名称后命名单个导出函数,以便普通require
函数可以加载它。要获取由require "mylib"
加载的库,可以使用导出的函数luaopen_mylib()
创建mylib.dll,该函数创建一个包含您希望能够使用的所有方法的表并将其返回。该函数以及它创建的所有其他方法在每次调用时都会传递当前的Lua状态。
如果您的引擎在脚本中不允许require
,则它也不太可能允许package.loadlib
,并且您可能根本无法加载DLL。