LUA встраивается в C ++ socket.http [ошибка: попытка вызвать нулевое значение] - PullRequest
0 голосов
/ 22 октября 2018

Когда я запускаю этот код, получаю ошибку

[строка "local http = require" socket.http "..."]: 3: попытка вызватьnil value (поле '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 голосов
/ 22 октября 2018

Я считаю, что проблема в вашем коде заключается в следующей строке:

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

Согласно документации она вызывает функцию luaopen_package и сохраняет результат в таблице package.loaded["socket.http"].Это явно не то, что нужно делать, потому что когда ваш код пытается явно загрузить пакет "socket.http" с помощью require "socket.http", он этого не сделает: запись таблицы для ключа "socket.http" уже занята другим пакетом (а именно, package).

Вам нужно просто удалить эту строку, чтобы она заработала.

0 голосов
/ 22 октября 2018

это говорит о том, что ваша локальная переменная http равна nil, попробуйте распечатать ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...