【问题标题】:Loading .dll in Lua using require(..) or dofile(..)使用 require(..) 或 dofile(..) 在 Lua 中加载 .dll
【发布时间】:2014-11-29 20:27:18
【问题描述】:

是否可以在 Lua 中加载 .dll 库?假设我有一个已编译的 .dll 文件,该文件夹如下所示:

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

我可以通过 require(..) 或 dofile(..) 在 lua 中使用 .dll 库吗?

.dll 是否也必须采用某种格式?如果是这样,您可以分享我可以编译为 lua 可识别 .dll 的 C 代码模板

谢谢!

【问题讨论】:

标签: c++ dll lua


【解决方案1】:

您有几个选择,具体取决于您想做什么。 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。

【讨论】:

    【解决方案2】:

    如果 .DLL 不是 Lua 扩展模块而只是通用 .DLL,那么您可以使用像 luaffi 这样的“FFI”库来加载它并调用其中的函数。

    【讨论】:

      猜你喜欢
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 2017-07-16
      • 2014-04-16
      • 2018-08-03
      • 2020-07-18
      • 1970-01-01
      相关资源
      最近更新 更多