将luasocket添加到自带lua环境的程序(bizhawk)中

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 库二进制文件之间存在某种不兼容,但我没有想法。

zer*_*mus 5

这家伙的设置: 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 的错误是必要的。

更具体地说,我们有

  • /emuhawk.exe
  • /Lua(未触及)
  • /Socket/ftp.lua,http.lua等
  • /ltn12.lua,socket.lua,mime.lua
  • /lua5.1.dll
  • /mytest.lua

(来自http://files.luaforge.net/releases/luasocket/luasocket/luasocket-2.0.2/luasocket-2.0.2-lua-5.1.2-Win32-vc8.zip的文件)

我不能确切地说为什么所有这些都是必要的,但我认为它能起作用真是奇迹,因为我们有一个定制的lua。

使用 lua 时,如果您发现一个有效的目录结构,最好不要再与它纠缠。

更新:( 可能已经过时)一旦你做了一些不平凡的事情,你可能会发现 bizhawk 崩溃。看来这是由于与 luasocket 的“保护”系统发生冲突。检查 http.lua 并观察末尾的代码,该代码发送一个函数socket.protect来包装它。去掉socket.protect包装纸,应该可以解决这个问题。