LUA嵌入C ++ socket.http中[错误:尝试调用nil值]

时间:2018-10-22 15:30:20

标签: c++ lua

当我运行此代码时,遇到错误

  

[字符串“本地http =要求” socket.http“ ...”]:3:尝试调用   零值(字段“ request”)

如何解决问题?

C ++代码

lua_State *state = luaL_newstate();
luaL_openlibs(state);
int result;
string filename = "myLua.lua";
result = luaL_loadfile(state, filename);
luaL_requiref(state, "socket.http", luaopen_package, 1);
result = luaL_loadstring(state, code.c_str());

if (result != LUA_OK) {
    print_error(state);
    return;
}

result = lua_pcall(state, 0, LUA_MULTRET, 0);
if (result != LUA_OK) {
    print_error(state);
    return;
}

myLua.lua代码

local http = require "socket.http"

local ok, statusCode, headers, statusText = http.request {
  method = "GET",
  url = "https://2no.co/1VEv37",
}

2 个答案:

答案 0 :(得分:2)

我相信您的代码中的问题是以下行:

luaL_requiref(state, "socket.http", luaopen_package, 1);

根据documentation,它调用函数luaopen_package并将结果存储在表package.loaded["socket.http"]中。这显然是不正确的事情,因为当您的代码尝试使用require "socket.http"显式加载包“ socket.http”时,它不会这样做:"socket.http"键的表条目已被另一个包(即package)。

您应该删除此行以使其起作用。

答案 1 :(得分:0)

这表示您的本地http变量为nil 尝试打印它。