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

时间:2014-10-05 10:18:28

标签: c++ dll lua

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

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:3)

根据您的要求,您可以在此处选择一些选项。 Lua&#34;&#34;要求&#34;将加载DLL并期望存在单个函数:

int luaopen_XXXXX (lua_State* L)

必须命名DLL以匹配&#34; XXXXX&#34;部分,所以如果你写了一个名为&#34; sprite.dll&#34;那么你需要创建一个名为luaopen_sprite的函数。

从此功能内部,您可以手动注册&#39; C&#39;功能与Lua&#39; C&#39; API,允许从脚本中调用它们。请参阅Lua docs。

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

也可以使用FFI(外部功能接口)。它是一种直接调用C接口的方式,我相信它使用低级处理器特定的堆栈构造和jmps /调用。

答案 1 :(得分:0)

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