2012-05-20 2 views
0

Я проработал последние 6 часов, пытаясь решить эту проблему! и я coulnt получить в любом месте: sПрохождение lua table от C++ до .Lua script

Я хочу, чтобы иметь возможность создать таблицу Lua в C++ файл, а затем передать, что в файл Lua скрипт, который имеет следующую функцию Lua:

function MTable (t) 
local n=#t 
    for i=1,n do 
     print(t[i]) 
    end 
end 

я динамически создала одномерную матрицу с двумя строками:

lua_newtable(L); 
lua_pushstring(L,"10.10.1.1"); 
lua_pushstring(L,"10.10.1.2"); 
lua_rawseti(L,-3,2); 
lua_rawseti(L,-2,1); 

так что теперь у меня есть стол поверх стека. Я проверил это, набрав это: if (lua_istable (L, lua_gettop (L))), который возвратил 1, что означает, что это таблица.

тогда я сделал это:

lua_getglobal(L, "MTable"); // push the lua function onto the stack 

uint32_t result = lua_pcall(L, 1, 0, 0); //argument 1 is for the table 
if (result) { 
printf(stderr, "Failed to run script: %s\n", lua_tostring(L, -1)); 
     exit(1); 
} 

так что я получил эту ошибку: Не удалось запустить скрипт: попытка вызова табличное значение

Пожалуйста, обратите внимание, что файл имеет несколько других функций, Я успешно звоню из C++.

Может кто-нибудь, пожалуйста, помогите мне решить эту ошибку? может ли это быть ошибкой от LUA? cz я правильно выполнил шаги ... я думаю!

+0

Это было задано и отправлено в список рассылки Lua. – lhf

ответ

3

Функция должна быть первая на стек, перед args.

Вы можете:

  1. толчок функция для вызова в стек перед формированием таблицы, например:

    lua_getglobal(L, "MTable"); 
    ...generate table on stack... 
    int result = lua_pcall(L, 1, 0, 0); 
    
  2. ли в порядке, что вы делаете сейчас, а потом просто поменять аргумент и функция перед делать PCALL:

    ...generate table on stack... 
    lua_getglobal(L, "MTable"); 
    lua_insert (L, -2); // swap table and function into correct order for pcall 
    int result = lua_pcall(L, 1, 0, 0); 
    
+0

СПАСИБО! он работал как магия! У меня есть еще один вопрос, как может C fecth таблица от lua? Я отредактировал сценарий Lua, чтобы вернуть t. поэтому до этого момента lua нажал t на стек. как C это взять? Я прочитал еще одну тему, рассматривая этот вопрос, но я не мог понять слово решения. Все, что я знаю, это то, что мне нужно написать функцию C, которая принимает параметр состояния Lua, и у меня нет идеи, как продолжить дальше отсюда! Знаете ли вы, как это сделать? – PeacefulSoul