簡體   English   中英

嵌入在 C++ socket.http 中的 LUA [錯誤:嘗試調用 nil 值]

[英]LUA embeded in C++ socket.http [error: attempt to call a nil value]

當我運行此代碼時,出現錯誤

[string "local http = require "socket.http"..."]:3: 嘗試調用一個 nil 值(字段 '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",
}

我相信您的代碼中的問題是以下幾行:

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

根據文檔,它調用函數luaopen_package並將其結果存儲在表package.loaded["socket.http"] 這顯然不是正確的做法,因為當您的代碼嘗試使用require "socket.http"顯式加載包“socket.http”時,它不會這樣做: "socket.http"鍵的表條目已經被占用由另一個包(即package )。

您應該刪除此行以使其工作。

據說您的本地 http 變量為零,請嘗試打印它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM