我怎么能在内部嵌入Lua套接字,就像oslib,debuglib一样?

时间:2010-02-04 03:31:09

标签: sockets lua luasocket

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

我搜索了maillist,看到有些人讨论这个话题, http://lua-users.org/lists/lua-l/2005-10/msg00269.html

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

我在使用VC2008的Windows XP中尝试了这些步骤:

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,它也是正确的。

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

谁能告诉我原因?

2 个答案:

答案 0 :(得分:1)

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

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

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

您引用的电子邮件是调整package.preload表(现在看起来有点奇怪,但可能仍然有效),以便在调用require时正确加载内置C代码。

答案 1 :(得分:0)

尝试运行

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

也许我们能够提供帮助。