Fel*_*elk 4 lua luasocket lua-5.1
我试图让 luasocket 在Bizhawk的 lua 脚本环境中工作,但到目前为止还没有运气。我在这里下载了vc8版本的luasocket ,确保我已经安装了vc8,并检查了bizhawk自带的lua版本:5.1
但是,当我启动脚本时,出现以下错误:
LuaInterface.LuaScriptException: error loading module 'socket.core' from file './libs/socket\core.dll':
Das angegebene Modul wurde nicht gefunden. (the given module was not found)
Run Code Online (Sandbox Code Playgroud)
lua代码:
package.path = package.path..';./libs/lua/?.lua'
package.cpath = package.cpath..';./libs/?.dll'
local socket = require("socket")
Run Code Online (Sandbox Code Playgroud)
文件系统结构:
libs
> lua
> socket
ftp.lua http.lua smtp.lua tp.lua url.lua
ltn12.lua
mime.lua
socket.lua
> socket
core.dll
> mime
core.dll
Run Code Online (Sandbox Code Playgroud)
它似乎找到了文件,因为当我的文件结构错误时,它给了我实际的文件未找到错误。我最好的猜测是,Bizhawk 附带的 lua 和外部 luasocket 库二进制文件之间存在某种不兼容,但我没有想法。
这家伙的设置: https: //github.com/antogerva/emuHostUDP(解压缩到 emuhawk.exe 基本目录)。他的示例似乎有效,但它可能不包含您需要的所有内容。例如 HTTP。
由于项目很复杂并且 luasockets 示例很糟糕,因此这里有一个用于测试 http 的单行代码:
print(require("socket.http").request{ url = "http://www.google.com" });
Run Code Online (Sandbox Code Playgroud)
按照他的模型,我应用了以下方法:将 lua dir 的内容复制到 root;lua5.1.dll 到根目录。请注意,我们不会使用 luasockets 中的 core.dll。这是因为BizHawk 现在已经集成了它们;这对于解决 bizhawk 中 luasockets 的错误是必要的。
更具体地说,我们有
我不能确切地说为什么所有这些都是必要的,但我认为它能起作用真是奇迹,因为我们有一个定制的lua。
使用 lua 时,如果您发现一个有效的目录结构,最好不要再与它纠缠。
更新:(
可能已经过时)一旦你做了一些不平凡的事情,你可能会发现 bizhawk 崩溃。看来这是由于与 luasocket 的“保护”系统发生冲突。检查 http.lua 并观察末尾的代码,该代码发送一个函数socket.protect来包装它。去掉socket.protect包装纸,应该可以解决这个问题。