【问题标题】:How could I embedded socket in Lua internally, just like oslib, debuglib?我如何在 Lua 内部嵌入套接字,就像 oslib、debuglib 一样?
【发布时间】:2014-10-15 18:05:25
【问题描述】:

我想实现像在我的 Lua 构建中嵌入套接字函数这样的函数。 所以我不再需要复制socket.core.dll(只是为了好玩)。

我搜索邮件列表,看到一些人讨论这个话题, http://lua-users.org/lists/lua-l/2005-10/msg00269.html

但是我对细节步骤有疑问,谁能给我一个详细的更改lua和luasocket代码以使它们一起工作的步骤(而不是使用dll方法)。

我在 windows xp 中用 VC2008 尝试了这些步骤:

1) 将 luasocket 代码复制到 Lua 项目中。

2) 添加一些代码

static const luaL_Reg lualibs[] = {
  {"", luaopen_base},
  {LUA_LOADLIBNAME, luaopen_package},
  {LUA_TABLIBNAME, luaopen_table},
  {LUA_IOLIBNAME, luaopen_io},
  {LUA_OSLIBNAME, luaopen_os},
  {LUA_STRLIBNAME, luaopen_string},
  {LUA_MATHLIBNAME, luaopen_math},
  {LUA_DBLIBNAME, luaopen_debug},
  {LUA_SOCKETLIBNAME, luaopen_socket_core}, // add this line
  {LUA_MIMELIBNAME, luaopen_socket_core}, // add this line
  {NULL, NULL}
};

3) 构建项目并运行它。

当我输入print(socket._VERSION)时,它显示luasocket 2.0.2,是正确的。

当我输入print(socket.dns.toip("localhost"))时,它显示127.0.0.1 table: 00480AD0,也是正确的。

但是当我尝试使用其他功能时,例如绑定,它无法工作。

谁能告诉我原因?

【问题讨论】:

    标签: sockets lua luasocket


    【解决方案1】:

    你需要把 luasocket 的东西放到 package.preload 表中,这样:

    lua_getfield(L, LUA_GLOBALSINDEX, "package");
    lua_getfield(L, -1, "preload");
    lua_pushcfunction(L, luaopen_socket_core);
    lua_setfield(L, -2, "socket.core");
    
    // add mime.core yourself...
    

    【讨论】:

    • 对于像我这样不知道该把代码放在哪里的人,我把它放在我的luaL_openlibs(L); 之后:main()
    【解决方案2】:

    luasocket 是一个混合的 C/lua 模块,如果您希望它在没有任何额外文件的情况下工作,您需要将两个版本捆绑到您的应用程序中。

    socket.lua 加载 socket.core(来自 socket/core.dll)
    mime.lua 加载 mime.core(来自 mime/core.dll)

    因此,为了让您的应用程序正常工作,您需要将所有 .dll 文件和 .lua 文件构建到您的应用程序中并手动加载它们(或将它们设置为通过自定义包加载器正确加载)。

    您引用的电子邮件正在调整 package.preload 表(现在看起来有点奇怪,但无论如何可能会起作用)以在调用 require 时正确加载内置 C 代码。

    【讨论】:

      【解决方案3】:

      尝试运行

      for k, v in pairs(socket) do print(k, v) end
      

      也许我们可以提供帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-22
        • 2013-03-14
        • 1970-01-01
        • 2012-05-21
        • 2021-07-23
        • 1970-01-01
        • 1970-01-01
        • 2021-12-03
        相关资源
        最近更新 更多