是否可以在Lua中加载.dll库?假设我有一个已编译的.dll文件,该文件夹如下所示:
<folder>
|------test.lua
|------mylib.dll
我可以使用require(..)或dofile(..)在lua中使用.dll库吗?
.dll也必须采用某种格式吗?如果是这样,你可以共享C代码的模板,我可以编译为lua可识别的.dll
谢谢!
答案 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”库加载它并调用其中的函数。