我该如何在 Lua 内部嵌入 socket,就像 oslib、debuglib 一样?

我想实现在我的 Lua 构建中嵌入 socket 函数的功能。

所以我不需要再复制 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},// 添加此行   {LUA_MIMELIBNAME,luaopen_socket_core},// 添加此行   {NULL,NULL} }; `

3)构建项目并运行它。

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

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

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

有谁能告诉我原因?

原文链接 https://stackoverflow.com/questions/2197144

点赞
stackoverflow用户41661
stackoverflow用户41661

尝试运行

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

也许我们可以提供帮助。

2010-02-05 01:51:18
stackoverflow用户258523
stackoverflow用户258523

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

socket.lua 会加载 socket.core(从 socket/core.dll 中)

mime.lua 会加载 mime.core(从 mime/core.dll 中)

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

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

2010-02-20 03:54:26
stackoverflow用户618981
stackoverflow用户618981

你需要将 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");

// 将 mime.core 添加进去...
2012-11-07 07:08:29