Блог им. Kot_Begemot

void lua_pushnumber (lua_State *L, lua_Number n);
const char *lua_pushstring (lua_State *L, const char *s);
lua_Number lua_tonumber (lua_State *L, int index);
const char *lua_tostring (lua_State *L, int index);где L — указатель Lua-стэка, а index — абсолютный или относительный индекс переменной в стэке.
static int Func(Lua State *L)
{
lua_push...
return(N);
}
CppDLL=require('CppDLL');
Var9,Var10 = CppDLL.Func();
lua_settop(L,0); // Очищаем Lua стэк
lua_createtable( L, row, 0 ); // создаем луа - таблицу (строки)
for (i=0;i<row;i++)
{
lua_pushinteger(L,i+1);
lua_createtable(L,col,0); // создаем луа-таблицу соответствующую i-ой строке
for(j=0;j<col;j++) // записываем строку в цикле
{
lua_pushinteger(L,j+1); // задаем индекс j-ого элемента i-ой строки
lua_pushnumber( L, arr[i+j*row] ); // задаем значение j-ого элемена i-ой строки
//lua_settable(L, -3); // записываем элемент [i][j] в строку i и очищаем пару [индекс j, значение] из стэка LUA
lua_rawset(L, -3); // записываем элемент [i][j] в строку i и очищаем пару [индекс j, значение] из стэка LUA
}
//lua_settable(L,-3); // добавляем строку i к существующей Lua таблице и отчищаем пару [индеск строки, строка в Lua стэке]
lua_rawset(L,-3); // добавляем строку i к существующей Lua таблице и отчищаем пару [индеск строки, строка в Lua стэке]
}
return(1); // Возвращаем в LUA таблицу, записанную в стэке под индексом 2
int row=lua_objlen(L,-1); // Узнаем число строк в таблице lua_pushnumber(L,1); lua_rawget(L,2); // выделяем 1-ую строку из таблицы int col=lua_objlen(L,3); // Узнаем число столбцов в таблице
Считываем матрицу Lua в массив C++ «ptr» :
for (i=0;i<row;i++) // пробегаем по строкам
{
lua_settop(L,2); // очищаем побочный стэк
lua_pushnumber(L,i+1); // номер строки к загрузке
lua_rawget(L,2); // Загрузка строки в переменную 3
for (j=0;j<col;j++) // пробегаем по столбцам
{
lua_pushnumber(L,j+1); // номер столбца к загрузке
lua_rawget(L,3); // Загрузка элемента [i][j] в переменную 4
ptr[i+j*row]=lua_tonumber(L,4); //Записываем значения из Lua в Матлаб
lua_settop(L,3); //Убираем лишние переменные из стэка
}
}


Предложения и критика приветствуются.
Торгуйте алгоритмами.
С уважением, Кот-Бегемот.
возвращает кол-во элементов, один, таблицу, лежащую на вершине стека
сначала на стеке только таблица(а не ее имя). но можно и по имени ее получить дополнив вызовом lua_getfield, чтобы получить уже таблицу(или что там будет лежать по имени которое передаем.
совет, для новичков нужно бы подправить показывая что происходит со стеком после каждого вызова. так наглядней и проще описать что там происходит.
и еще пример последний стоит заменить на что-нить использующее описанный выше него функционал а не матлабовский скрипт. чтобы могли сразу попробовать то что изучили. мол вот так все легко.
на офф сайте есть шикарная документация по функциям и что они делают со стеком. www.lua.org/manual/5.1/manual.html
проверил кодом:
Вы правы — возвращает вершину стэка.
Текст поправил.
Впрочем, было время (а может и сейчас можно), когда данные можно было напрямую из виртуальной памяти квика высчитывать. На древних версиях без проблем было, сейчас возможно шифруют. Скорость была бешенной.
Скачать ее и мануал можно с сайта ARQA.
Хотя, с заявками сделками можно и непосредственно через Луа работать.