1 (2022-10-12 19:42:06 отредактировано Serg_)

Тема: Создать новый стек Lua

Час от часу не легче...

Есть такой простой код:

В квике Lua-скрипт:

function main()

Quik_Lua_connector= require("Quil_Lua_connector_work_TEST")    

Quik_Lua_connector.TestFunc_run_WinConsole_for_dll()

Quik_Lua_connector.run_Cpp() 

-------------------------
while not stopped do 
sleep(1)
end 
-------------------------
end

В С++ соответственно:

static int run_Cpp(lua_State* Lua_stek)
{

    lua_State* L = luaL_newstate();

    if (L == NULL)
    {
        std::cout << "L == NULL" << std::endl;    //Ошибки нет.
    }

lua_getglobal(L, "CreateDataSource");           

lua_pushstring(L, "TQBR");    
lua_pushstring(L, "GAZP");         
lua_pushnumber(L, "INTERVAL_MN1");                

std::cout << "Size_stack:" << lua_gettop(L) << std::endl;   //Размер 4 - как и должно быть

int status_lua_pcall = lua_pcall(L, 3, 2, 0);   
    
if(status_lua_pcall  != 0)
{
std::cout<<"Error"<<std::endl;   //attempt to call a nil value
}

}

То есть я хочу использовать не автоматически созданный при вызове функции run_Cpp - Lua стек, а создать свой новый - через luaL_newstate.

Стек создается, он не равен нулю.
В стек добавляются элементы - то есть он рабочий.
Но, как я вызываю lua_pcall - то lua_pcall завершается ошибкой "attempt to call a nil value".

Со автоматически созданный стеком Lua_stek - никаких ошибок нет, все работает.

Что это может быть ?

2

Re: Создать новый стек Lua

Serg_ пишет:

Стек создается, он не равен нулю.
В стек добавляются элементы - то есть он рабочий.
Но, как я вызываю lua_pcall - то lua_pcall завершается ошибкой "attempt to call a nil value".

Со автоматически созданный стеком Lua_stek - никаких ошибок нет, все работает.

Что это может быть ?

В созданном стеке - только функции чистого Lua. Никаких CreateDataSource там нет, никто их туда не добавлял.
Более того, даже стандартных библиотек Lua (string, math) там тоже нет, они тоже не добавлены.