1

Тема: Lua - Вызвать метод таблицы из C++

Хочу вызвать метод ds:O(99). Не могу понять как это сделать. Подскажите.

#
# Исполняем функцию CreateDataSource()
#
lua_getfield(lua, LUA_GLOBALSINDEX, "CreateDataSource");
lua_pushstring(lua, "TQBR");
lua_pushstring(lua, "ROSN");
lua_pushnumber(lua, 5); // 5-минутки
lua_call(lua, 3, 2);
lua_pop(lua, 1);
#
# Далее пробуем вызвать медок ds:O(99)
#
lua_getfield(lua, -1, "DS"); // создаем указатель на таблицу
lua_getfield(lua, -2, "O"); // получаем указатель на функцию ds:О()
lua_pushinteger(lua, 99); // загоняем в стек номер свечи
lua_insert(lua, -2);
lua_call(lua, 1, 1);
double Res = (double)lua_tonumber(lua, -1); // Получаем значение открытия свечи
lua_pop(lua, 1);

В результате Res = 1000.

Соц.сеть трейдеров [url]https://tradernet.ru/admires/NiKO[/url]

2 (2016-12-08 05:10:17 отредактировано art)

Re: Lua - Вызвать метод таблицы из C++

Хочу вызвать метод ds:O(99). Не могу понять как это сделать. Подскажите.


Как вариант (даже более чем).

// C++

// ds=nil;
lua_settop(L,0);
lua_pushnil(L);
lua_setglobal(L,"ds");

// ds=CreateDataSource("TQBR","ROSN","5");
lua_getfield(L, LUA_GLOBALSINDEX, "CreateDataSource");
lua_pushstring(L, "TQBR");
lua_pushstring(L, "ROSN");
lua_pushinteger(L, 5);
lua_pcall(L, 3, 1, 0);
if (lua_istable(L, -1)) {
   lua_setglobal(L,"ds");
   };

//  !!!!!! со стека не снимаем значение перед вызовом "метода" !!!!!!!

//помещаем на стек значение ds 
lua_getglobal(L, "ds");

// ds:O(99);
lua_pushstring(L, "O");
lua_rawget(L, -2);
lua_pushvalue(L, -2);
lua_pushnumber(L, 99);
lua_pcall(L, 2, 1, 0);
double open = lua_tonumber(L, -1);
lua_pop(L, 1);

В переменной open лежит значение по индексу  99 вызываемое функцией O() ;