使用require(..)或dofile(..)在Lua中加载.dll。

在 Lua 中加载 .dll 库是否可能?例如,我有一个已编译的 .dll 文件,文件夹看起来像这样:

<folder>
   |------test.lua
   |------mylib.dll

我能否使用 require(..) 或 dofile(..) 在 Lua 中使用 .dll 库?

此外,.dll 是否必须是某种格式?如果是的话,您能否分享一下我可以将其编译为 Lua 可识别的 .dll 的 C 代码模板?

谢谢!

点赞
用户869951
用户869951

如果 .DLL 不是 Lua 扩展模块而只是一般的 .DLL,那么你可以使用一个 "FFI" 库,比如 luaffi 来加载它,并调用其中的函数。

2014-10-05 23:09:44
用户2705567
用户2705567

根据您要做什么,您有几个选择。Lua的"require"将加载DLL,并期望一个单一的函数存在:

int luaopen_XXXXX (lua_State* L)

DLL的名称必须与“XXXXX”部分匹配,因此如果您编写了一个名为“sprite.dll”的模块,则需要创建一个名为luaopen_sprite的函数。

在此函数内部,您可以使用Lua的'C' API手动注册'C'函数,使它们能够从脚本中调用。关于此,请参阅Lua文档。

您还可以使用封装工具。我广泛使用过SWIG。它自动获取头文件并构建一个包含所有上述内容的C或C++文件。

还可以使用FFI(外部函数接口)。这是一种直接调用C接口的方法,我相信它使用低级处理器特定的堆栈构造和jmps/calls实现。

2014-10-06 16:54:39