Plattform: (wo Lua und LuaSocket portiert werden) Ein Embedded-System mit ARM 7-Entwicklungsboard, auf dem Drittanbieter-RTOS mit TCP/IP-Stack ausgeführt wird.LuaSocket - Versuch, Feld 'try' (ein Nullwert) aufzurufen
Was funktioniert:
- Verwendung von Lua-Standardbibliothek wie "io" Anrufe, drucken, behaupten, etc
- durch UDP-Pakete sendet die udp = assert (socket.udp) Methode verwendet wird, behaupten (udp: send (etwas))
Problem: Bei der Ausführung ein Beispiel smtp lua Script:
local smtp = require("socket.smtp")
from = "myEmail"
rcpt = {"<someOne's Email>"}
mesgt = { heasers = {someHeader}, body = "Hello World" }
r, e = smtp.send {
from = from,
rcpt = rcpt,
source = smtp.message(mesgt),
server = "someServer",
port = 25,
}
-- an error returns after execution:
-- lua\socket\smtp.lua:115: attempt to call field 'try' (a nil value)
-- Corresponding code in smtp.lua around line 115:
function open(server, port, create)
local tp = socket.try(tp.connect(server or SERVER, port or PORT,
TIMEOUT, create))
local s = base.setmetatable({tp = tp}, metat)
-- make sure tp is closed if we get an exception
s.try = socket.newtry(function()
s:close()
end)
return s
end
// Where try = newtry() in socket.lua and the corresponding C code is the same
// from the one provided with the library for UNIX:
static int global_newtry(lua_State *L) {
lua_settop(L, 1);
if (lua_isnil(L, 1)) lua_pushcfunction(L, do_nothing);
lua_pushcclosure(L, finalize, 1);
return 1;
}
Hallo Kikito, Danke für Ihre Hilfe. Ich denke, ich habe das Problem behoben, indem ich meine Socket- "Core" -Bibliothek, die ich vorher nicht richtig gemacht hatte, statisch verknüpfte. Vielen Dank! – user1325966
In diesem Fall könnten Sie bitte meine Antwort als gültig markieren? Klicken Sie einfach auf das "graue ✔-Symbol" links von dieser Antwort, so dass es grün wird. – kikito
Das ist mir auch passiert. In der Tat fehlt ihm diese Lib https://github.com/hjelmeland/try-lua/blob/master/try.lua. –